viernes, 29 de abril de 2011

Leer y escribir JSON con PHP

logo de JSON
Hace unos días en el laburo me encargaron unas tareas de programación. Estaba saltando en una pata de la alegría. Como ya he contado, hace un tiempo que no estaba programando porque me habían asignado otras tareas. Toman a un junior y lo mandan a hacer mandados. Así nunca voy a pasar de junior  :)

Pero quejas aparte, voy al grano. Resulta que me encargaron hacer un script en PHP que generara un archivo json para que lo lean desde javascript.

JSON

A mi me gusta decirle "jota son", pero le suelen decir "yéi son". Es un formato de representación de datos que encapsula objetos, arrays o variables en una notación especial.

JSON es JavaScript Object Notation, que en criollo sería Notación de Objetos de JavaScript o algo así. Y básicamente es eso, la forma en la que se representan los objetos en Javascript. Adentro de eso puede haber desde una sola variable, un array, objetos enteros, etc.

JSON vs XML
XML vs JSON

XML es otra forma de representar datos, pero que usa etiquetas como el HTML para formatearlos. La ventaja del JSON son más que nada dos:

  • Es más liviano que el XML, porque no agrega etiquetas que agregan muchos bytes al contenido.
  • Se puede leer casi directamente en Javascript y eso lo hace más rapido. En el caso de XML hay que procesar más y eso lo hace más lento.

AJAX

Desde hace unos años se ha puesto de moda el Ajax. La forma de comunicarse con el servidor en un principio era el XML. Pero el JSON irrumpió para imponerse por esas ventajas que mencioné antes. Así que muchas de las comunicaciones por ajax se hacen en Json, muchos web services ahora usan solo este formato.

Lo que me pidieron

Lo que me pidieron hacer, básicamente es una especie de web service.

Desde una página web, mediante ajax, se piden datos a una dirección (donde esta mi script php). Esos datos los usan para armar una tabla, que no viene al caso para que es.

En el servidor hay un archivo que incluyo en mi script php que contiene una variable con datos. Esa variable se llena con datos desde la base de datos cada cierto tiempo (de eso no me ocupo yo, porque ya está hecho).

Esa variable es un objeto que contiene un array asociativo con valores, como por ejemplo:

Equipo del Ajax
$data = array(
  'dato1' => 1,
  'dato2' => 2,
  'dato3' => 3,
  'dato4' => 4,
  'dato5' => 5,
);

Después de buscar un rato por la web, y de que algunos de mis compañeros en el laburo me dijeran que tenía que incluir una librería para poder hacerlo, encontré que el mismo lenguaje PHP trae una función para hacer este trabajo:
  • json_encode, que devuelve una cadena de texto en formato json con la representación de lo que le pasamos como parámetro.
y tambien está su contraparte:
  • json_decode  que decodifica el json que le pasamos como parámetro y nos devuelve la variable, el array o el objeto que represente.
json_encode()

Pero en mi caso solo necesitaba json_encode. Asi que solo tuve que hacer esto:
El elefantito de PHP

$json = json_encode($data);

y despues simplemente imprimirlo.

echo $json;

y eso imprime lo siguiente:

{"dato1":1,"dato2":2,"dato3":3,"dato4":4,"dato5":5}

Decodificar JSON

No necesité hacerlo, pero si me mandaran ese json para obtener el equivalente en PHP:

$json = '{"dato1":1,"dato2":2,"dato3":3,"dato4":4,"dato5":5}';
Manual de PHP
$data = json_decode($json);

Y listo, en $data tenemos lo mismo que teníamos antes. Así de fácil.

De vez en cuando leer el manual de PHP

Esta función está disponible a partir de la versión 5.2. Parece que antes se usaba una librería para formatear los objetos en json, o se hacía a mano, por eso mis compañeros me aconsejaron eso. Pero a mi se me dió por buscar en el manual de PHP y encontré estas funciones.

A veces hay que buscar en el manual de php, porque es un lenguaje que está en constante evolución y puede ser que aquello que teníamos que hacer a pulmón, ahora está solucionado en una sola funcioncita   :)

Ojalá le sirva a alguien   :)

Diego Arregui

4 comentarios:

  1. Very nice post and interesting to read, I love visiting this blog.

    ResponderEliminar
  2. es lindo para comunicación de datos pero para leerlo solo, marea un poco. Seguro que es falta de practica.

    Me gusto tu comentario contra la cacería.

    ResponderEliminar
  3. muschas gracias por la explicacion

    ResponderEliminar
  4. Cómo se te puede contactar Diego? Quizá nos pudieras dar una mano. af.disenio@gmail.com. Saludos.

    ResponderEliminar

No se zarpen! :)

Bloggers - Meet Millions of Bloggers