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: 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: 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í: 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) ); ]]>