Categoria: Programacion Tema: Java script - Java Titulo: Producir JSON desde PHP
Fecha del Tema: 2013-04-20 00:14:39Producir JSON desde PHP En este artículo vamos a mostrar cómo crear un JSON desde PHP con las funciones nativas del lenguaje de programación del lado del servidor. Además veremos varias particularidades de la creación de cadenas de texto con notación JSON desde PHP, que son importantes de conocer para no caer en problemas comunes de este tipo de operaciones. Existen diversas formas para implementar funcionalidades de procesamiento de archivos JSON desde PHP. En concreto en este artículo vamos a ver las funciones nativas de PHP que sirven para este tema, que se encuentran disponibles desde la versión de PHP 5.2. Cabe recordar, no obstante, que estas mismas funciones nativas se pueden instalar por separado, si es que no las tenemos y que existen otras librerías que también ofrecen posibilidades similares. Veremos entonces cómo producir cadenas con notación JSON a partir de variables simples, arrays y objetos PHP. Crear un JSON desde PHP Para crear una cadena para expresar un objeto u otro tipo de variable con JSON en PHP se dispone de una función llamada json_encode(), que recibe lo que deseamos convertir en notación JSON y devuelve una cadena de texto con el JSON producido. Podemos convertir en JSON cualquier cosa que necesitemos, como una cadena, una variable numérica, un array -normal o asociativo- y objetos con todo tipo de datos dentro. Veremos varios ejemplos que ilustrarán este proceso. <?php //esto no va $mivariable = "hola"; print_r(json_encode($mivariable)); Esto devuelve: "hola" Ahora convertimos un array normal: $miArray = array(1,4,6,8,3,34.8,9,43); print_r(json_encode($miArray)); Que devuelve: [1,4,6,8,3,34.8,9,43] ?>//esto no va Estos ejemplos anteriores son sin duda quizás demasiado simples, pero la cosa empieza a tener sentido cuando se convierte un array asociativo en JSON, como se puede ver a continuación. <?php //esto no va $miArray = array("manzana"=>"verde", "uva"=>"Morada", "fresa"=>"roja"); print_r(json_encode($miArray)); {"manzana":"verde","uva":"Morada","fresa":"roja"} ?>//esto no va Este resultado ya tiene una forma parecida a lo que estamos acostumbrados a ver en JSON. Podríamos fijarnos que la cadena que devuelve no tiene saltos de línea e identación de los elementos, con lo que la lectura se dificulta un poco por seres humanos. No obstante, podríamos utilizar esa cadena para crear una variable Javascript y por supuesto podremos acceder a cualquier valor del JSON, de una manera parecida a esta: <?php //esto no va <script> JSONFrutas = eval(<?php echo json_encode($miArray);?>); alert(JSONFrutas.manzana); </script> ?>//esto no va Como se ha visto, para almacenar el JSON en una variable Javascript, sin almacenar la propia cadena, sino el objeto que representa, tenemos que utilizar la función Javascript eval(). Luego podemos acceder a los componentes del JSON como lo hacemos con cualquier objeto, variable, operador punto y luego el nombre de la propiedad a acceder. Crear un objeto con PHP y convertirlo en JSON Como decía, lo bonito es que desde PHP podemos convertir cualquier objeto que tengamos, para generar el JSON del mismo y poder enviarlo a Javascript o cualquier otro lenguaje o componente que necesitemos que lo procese. El mecanismo es exactamente igual, con la salvedad que primero tenemos que crear una clase, instanciar un objeto y luego convertirlo a JSON con json_encode(). Así crearíamos una clase e instaciaríamos ojetos con ella. //creo una clase arbol <?php //esto no va class NodoArbolDHTML{ var $nombre; var $url; var $hijos; function __construct($nombre,$url){ $this->nombre = $nombre; $this->url = $url; } function anadirHijo($nodoHijo, $nombre){ //añadir un hijo if (!isset($this->hijos)){ $this->hijos = array(); } $this->hijos[$nombre] = $nodoHijo; } } ?>//esto no va Como se ha visto, se ha implementado una clase NodoArbolDHTML, con la que podríamos crear una estructura de árbol. El árbol tiene distintos nodos y cada uno a su vez tiene un nombre, una URL y un conjunto que hijos, que también son nodos del árbol. Ahora, podríamos instanciar objetos tipo nodo, para crear el árbol, de la siguiente manera. <?php //esto no va $raiz = new NodoArbolDHTML("Raiz", "http://www.loquesea.com"); $miNodo = new NodoArbolDHTML("Mi arbolito", "http://www.oi.com"); $raiz->anadirHijo($miNodo, "loquesea"); $miNodo2 = new NodoArbolDHTML("Mi otro nodo", "http://www.as.com"); $raiz->anadirHijo($miNodo, "otro"); ?>//esto no va Con esto ya tenemos la mayor parte del trabajo creado, porque para producir el JSON simplemente tenemos que llamar a la función json_encode(), que ya hemos visto repetidas veces.
Producir JSON desde PHP En este artículo vamos a mostrar cómo crear un JSON desde PHP con las funciones nativas del lenguaje de programación del lado del servidor. Además veremos varias particularidades de la creación de cadenas de texto con notación JSON desde PHP, que son importantes de conocer para no caer en problemas comunes de este tipo de operaciones. Existen diversas formas para implementar funcionalidades de procesamiento de archivos JSON desde PHP. En concreto en este artículo vamos a ver las funciones nativas de PHP que sirven para este tema, que se encuentran disponibles desde la versión de PHP 5.2. Cabe recordar, no obstante, que estas mismas funciones nativas se pueden instalar por separado, si es que no las tenemos y que existen otras librerías que también ofrecen posibilidades similares. Veremos entonces cómo producir cadenas con notación JSON a partir de variables simples, arrays y objetos PHP. Crear un JSON desde PHP Para crear una cadena para expresar un objeto u otro tipo de variable con JSON en PHP se dispone de una función llamada json_encode(), que recibe lo que deseamos convertir en notación JSON y devuelve una cadena de texto con el JSON producido. Podemos convertir en JSON cualquier cosa que necesitemos, como una cadena, una variable numérica, un array -normal o asociativo- y objetos con todo tipo de datos dentro. Veremos varios ejemplos que ilustrarán este proceso. <?php //esto no va $mivariable = "hola"; print_r(json_encode($mivariable)); Esto devuelve: "hola" Ahora convertimos un array normal: $miArray = array(1,4,6,8,3,34.8,9,43); print_r(json_encode($miArray)); Que devuelve: [1,4,6,8,3,34.8,9,43] ?>//esto no va Estos ejemplos anteriores son sin duda quizás demasiado simples, pero la cosa empieza a tener sentido cuando se convierte un array asociativo en JSON, como se puede ver a continuación. <?php //esto no va $miArray = array("manzana"=>"verde", "uva"=>"Morada", "fresa"=>"roja"); print_r(json_encode($miArray)); {"manzana":"verde","uva":"Morada","fresa":"roja"} ?>//esto no va Este resultado ya tiene una forma parecida a lo que estamos acostumbrados a ver en JSON. Podríamos fijarnos que la cadena que devuelve no tiene saltos de línea e identación de los elementos, con lo que la lectura se dificulta un poco por seres humanos. No obstante, podríamos utilizar esa cadena para crear una variable Javascript y por supuesto podremos acceder a cualquier valor del JSON, de una manera parecida a esta: <?php //esto no va <script> JSONFrutas = eval(<?php echo json_encode($miArray);?>); alert(JSONFrutas.manzana); </script> ?>//esto no va Como se ha visto, para almacenar el JSON en una variable Javascript, sin almacenar la propia cadena, sino el objeto que representa, tenemos que utilizar la función Javascript eval(). Luego podemos acceder a los componentes del JSON como lo hacemos con cualquier objeto, variable, operador punto y luego el nombre de la propiedad a acceder. Crear un objeto con PHP y convertirlo en JSON Como decía, lo bonito es que desde PHP podemos convertir cualquier objeto que tengamos, para generar el JSON del mismo y poder enviarlo a Javascript o cualquier otro lenguaje o componente que necesitemos que lo procese. El mecanismo es exactamente igual, con la salvedad que primero tenemos que crear una clase, instanciar un objeto y luego convertirlo a JSON con json_encode(). Así crearíamos una clase e instaciaríamos ojetos con ella. //creo una clase arbol <?php //esto no va class NodoArbolDHTML{ var $nombre; var $url; var $hijos; function __construct($nombre,$url){ $this->nombre = $nombre; $this->url = $url; } function anadirHijo($nodoHijo, $nombre){ //añadir un hijo if (!isset($this->hijos)){ $this->hijos = array(); } $this->hijos[$nombre] = $nodoHijo; } } ?>//esto no va Como se ha visto, se ha implementado una clase NodoArbolDHTML, con la que podríamos crear una estructura de árbol. El árbol tiene distintos nodos y cada uno a su vez tiene un nombre, una URL y un conjunto que hijos, que también son nodos del árbol. Ahora, podríamos instanciar objetos tipo nodo, para crear el árbol, de la siguiente manera. <?php //esto no va $raiz = new NodoArbolDHTML("Raiz", "http://www.loquesea.com"); $miNodo = new NodoArbolDHTML("Mi arbolito", "http://www.oi.com"); $raiz->anadirHijo($miNodo, "loquesea"); $miNodo2 = new NodoArbolDHTML("Mi otro nodo", "http://www.as.com"); $raiz->anadirHijo($miNodo, "otro"); ?>//esto no va Con esto ya tenemos la mayor parte del trabajo creado, porque para producir el JSON simplemente tenemos que llamar a la función json_encode(), que ya hemos visto repetidas veces.