Primeros pasos con PHP y JSON
JSON es una notación Javascript para escribir objetos que se ha hecho bastante popular en el mundo del desarrollo de webs y que se utiliza en diversos lenguajes de programación, componentes (habitualmente Ajax), etc. Su éxito se debe a que es una excelente forma para almacenar información que deseamos compartir entre distintos componentes o lenguajes de las aplicaciones web. Si trabajamos con Ajax y alguno de los frameworks Javascript existentes, ya habremos notado esta posibilidad y posiblemente ya estemos utilizando JSON o una notación similar.
JSON, cuyas siglas significan JavaScript Object Notation (en español Notación de Objetos de JavaScript), es un formato ligero, fácil de escribir o codificar, así como también es fácil de leer por los seres humanos. Desde Javascript podemos procesar directamente cualquier objeto JSON y existen librerías para la mayoría de los lenguajes de programación que tienen funciones para interpretar este formato. Por ello se ha adoptado universalmente. Para más información podemos visitar el sitio web de JSON en http://www.json.org/.
Esto quiere decir que con JSON podemos comunicar datos fácilmente entre scripts Javascript y scripts PHP. Por ejemplo, pensemos en una validación de formulario que se desea hacer con Ajax. Los datos del formulario se pueden enviar a PHP por medio de POST y luego podríamos desde PHP enviar a Javascript el resultado de validar esos datos en el servidor. Como la validación puede ser positiva o negativa, así como puede tener más o menos códigos de error y acciones a realizar dependiendo de la información procesada, el script PHP tiene que mandar una respuesta más o menos elaborada al script Javascript y una posibilidad es enviar esos datos desde PHP utilizando la notación JSON.
PHP dispone de varias funciones para hacer distintos tratamientos con notación de objetos JSON, que permite convertir un objeto PHP, o cualquier otro tipo de variable, a un string con notación JSON, así como crear un objeto PHP a partir de un string codificado con JSON.
En PHP, como decíamos, es posible producir y consumir datos cargados con notación JSON, por medio de unas funciones de las que dispone el lenguaje, que existen de manera predeterminada en los servidores modernos de PHP y que se pueden utilizar también en instalaciones antiguas de PHP, aunque con algún trabajo de instalación adicional.
A partir de PHP 5.2 las funciones JSON están disponibles siempre, pero si utilizamos por ejemplo PHP 4 tendríamos que instalarlas manualmente. Para ello existen varios paquetes de librerías, que provienen de diversas fuentes, que tienen funciones para tratar con JSON desde PHP.
Veremos entonces cómo producir cadenas con notación JSON a partir de variables simples, arrays y objetos 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.
Podríamos tener el siguiente array asociativo en PHP:
$miArray = array("manzana"=>"verde", "uva"=>"Morada", "fresa"=>"roja");
print_r(json_encode($miArray));
Devolvería lo siguiente:
{"manzana":"verde","uva":"Morada","fresa":"roja"}
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:
<script> JSONFrutas = eval(<?php echo json_encode($miArray);?>); alert(JSONFrutas.manzana); </script>
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.
Interesante.. gracias