anterior  
índice  
siguiente  
Updated 2012-10-02 - Version ZF 2.0.3

Uso Avanzado de Zend_Json

Objetos JSON

Cuando se codifican objetos PHP como JSON, todas las propiedades públicas de ese objeto serán codificadas en un objeto JSON.

JSON no permite referencias a objetos, de manera que debe tenerse cuidado de no codificar objetos con referencias recursivas. Si tiene problemas con la recursión, Zend_Json::encode() y Zend_Json_Encoder::encode() permiten un segundo parámetro opcional para comprobar si hay recursión; si un objeto es serializado dos veces, se emitirá una excepción.

La decodificación de objetos JSON plantea una dificultad adicional, sin embargo, ya que los objetos Javascript se corresponden más estrechamente a un array asociativo de PHP. Algunos sugieren que debe pasarse un identificador de clase, y una instancia del objeto de esa clase debe crearse y alimentarla con datos de pares clave/valor del objeto JSON; otros consideran que esto podría plantear un considerable riesgo de seguridad.

Por defecto, Zend_Json decodificará objetos JSON como arrays asociativos. Sin embargo, si desea retornar un objeto, puede especificar esto:

1
2
// Decodifica objetos JSON como objetos PHP
$phpNative = Zend_Json::decode($encodedValue, Zend_Json::TYPE_OBJECT);

Por lo tanto, cualquiera de los objetos decodificados son devueltos como objetos StdClass con propiedades correspondientea a pares clave/valor en la notación JSON.

La recomendación de Zend Framework es que el desarrollador debe decidir cómo decodificar objetos JSON. Si debe crearse un objeto de un determinado tipo, puede ser creado en el código del desarrollador y alimentado con datos de los valores decodificados utilizando Zend_Json.

Codificando Objetos PHP

Si se codifican objetos PHP por defecto, el mecanismo de codificación sólo tiene acceso a las propiedades públicas de estos objetos. Cuando se implementa un método toJson() en un objeto a codificar, Zend_Json llama a este método y espera que el objeto devuelva una representación JSON de su estado interno.

Codificador/Decodificador Interno

Zend_Json tiene dos modos diferentes dependiendo de si ext/json está habilitada o no en su instalación PHP. Si ext/json está instalado por defecto, las funciones json_encode() y json_decode() se utilizan para la codificación y decodificación JSON. Si ext/json no está instalado, una implementación de Zend Framework en código PHP es utilizada para la codificación/decodificación. Esto es considerablemente más lento que usando la extensión de PHP, pero se comporta exactamente igual.

También algunas veces puede querer utilizar el codificador/decodificador interno incluso si tiene ext/json instalado. Puede hacer esto llamando a:

1
Zend_Json::$useBuiltinEncoderDecoder = true:

Expresiones JSON

Javascript hace uso intenso de las funciones anónimas de llamadas de retorno, que pueden guardarse en variables del objeto JSON. Aunque solo funcionan si no regresaron dentro comillas dobles, que es lo que hace naturalmente Zend_Json. Con la Expression de apoyo para Zend_Json este apoyo puede codificar objetos JSON con callbacks validos de javascript. Esto funciona tanto con json_encode() como con el codificador interno.

Un callback javascript se representa usando el objero Zend_Json_Expr. Este implementa el patrón del objeto valor y es inmutable. Se puede establecer la expresión de javascript como el primer argumento del constructor. Por defecto Zend_Json::encode no codifica callbacks javascript, usted tiene que pasar la opción 'enableJsonExprFinder' = true dentro de la función encode. Si se habilita, la expresión de apoyo trabaja para todas las expresiones anidadas en grandes estructuras de objetos. Un ejemplo de uso se vería así:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
$data = array(
    'onClick' => new Zend_Json_Expr('function() {'
              . 'alert("Yo soy un callback válido de javascript '
              . 'creado por Zend_Json"); }'),
    'other' => 'sin expresión',
);
$jsonObjectWithExpression = Zend_Json::encode(
    $data,
    false,
    array('enableJsonExprFinder' => true)
);
|

Contenidos

Tema anterior

Uso Básico

Próximo tema

Conversión de XML a JSON

Esta página

Nota: Es necesario estar conectado a tu cuenta GitHub para contribuir a la documentación.

Edit this document

Edit this document

The source code of this file is hosted on GitHub. Everyone can update and fix errors in this document with few clicks - no downloads needed.

  1. Login with your GitHub account.
  2. Go to Uso Avanzado de Zend_Json on GitHub.
  3. Edit file contents using GitHub's text editor in your web browser
  4. Fill in the Commit message text box at the end of the page telling why you did the changes. Press Propose file change button next to it when done.
  5. On Send a pull request page you don't need to fill in text anymore. Just press Send pull request button.
  6. Your changes are now queued for review under project's Pull requests tab on GitHub.