JSON se ha convertido en una herramienta fundamental en la programación web, ya sea en servicios web, para comunicar con apps de móviles, pasar datos de php a javascript…
Desde PHP podemos tanto crear un JSON como recibirlo y manejarlo. Para la creación debemos utilizar la función json_encode(), que recibe lo que queramos serializar (una cadena, una variable numérica, un array, un objeto) y devuelve una cadena con los datos serializados. Si le pasamos un array normal o una cadena, no veríamos mucho cambio tras la serialización, pero si le pasamos un array asociativo, tendríamos un resultado como el del ejemplo:
$miArray = array("ferrari"=>"rojo", "porsche"=>"plateado", "mercedes"=>"negro"); $string = json_encode($miArray); //el valor de string sería {"ferrari":"rojo","porsche":"plateado","mercedes":"negro"}
Pero la verdadera potencia la encontramos cuando la aplicamos a objetos, ya que JSON nos permite serializar cualquier objeto de PHP, con el mismo procedimiento que usamos arriba: la función json_encode.
Una cuestión a la hora de trabajar con JSON que debemos tener en cuenta es la codificación de caracteres. En principio json_encode() ya convierte a Unicode los resultados, ya que en la notación JSON usamos siempre Unicode. El problema es que PHP por defecto tratará la cadena de origen como UTF-8, así que si no estás trabajando con esta codificación, y estás usando, por ejemplo, ISO-8859-1, se tornará necesario que codifiques las cadenas a UTF-8 antes de convertirlas en JSON. Esto se hace con la función utf8_encode().
$miArray = array("palabro1"=>utf8_enconde("ñandú"), "palabro2"=>"maniqueo", "palabro3"=>utf8_encode("bandoneón"); $cadenajson = json_encode($miArray);
Con esto ya recibiríamos las cadenas codificadas en UTF-8 y prevendríamos errores de codificación.
Ok, con esto hemos visto como generar un JSON, pero ¿cómo lo consumimos?.
Bueno, primero habría que destacar que existen varias librerías para JSON en PHP, pero desde PHP 5.2 este incluye librerías nativas desarrolladas en C, que son las más recomendables por cuestiones de rendimiento. Ahora vamos a suponer un objeto tal como el del ejemplo:
$strjson = '{ "elemento1": "valor1", "elemento2": "valor2", "elemento3": null, "otroobj": { "a ver": "oh", "venga": "va" };
Esa sería la cadena JSON que recibiría nuestro código PHP con un objeto serializado ¿cómo la transformamos en objeto? Pues si serializábamos con json_encode() el paso contrario será con json_decode():
$objetophp = json_decode($strjson); //si imprimimos objetophp con print_r() nos dará: stdClass Object ( [elemento1] => valor1 [elemento2] => valor2 [elemento3] => [otroobj] => stdClass Object ( [a ver] => oh [venga] => va ) )
Al tener un objeto puedes acceder a sus propiedades como en cualquier objeto normal de PHP.
Una serie de avisos: Recuerda, como dijimos antes, que las cadenas deben estar en UTF-8, si usas otra codificación tendrás que tirar de utf8_encode. Los nombres tanto de las propiedades como de los valores deben ir entre comillas dobles, no se aceptan comillas simples y sólo los valores numéricos o null pueden ir sin comillas. No te dejes ni llaves ni corchetes abiertos, ni ninguna coma de más. Todo eso provocará fallos.
Pingback: JSON & PHP | Programación de Dispositivos Móviles
si quiero serializar un objeto json a una clase php que yo cree como hago???
y como se carga la llamada al json????
un ejemplo mas concreto?
se puede hacer con un for dentro un echo json_encode?
tengo esto:
<?php
$numero = $_POST['numero'];
/*for ($i = 0; $i<=$numero;$i++)
{
echo json_decode($i);
}*/
//echo json_encode($numero);
for ($i = 0; $i