Recordemos que existen diversas librerías para que podamos trabajar con cadenas en notación JSON, que vimos en el artículo de librerías disponibles en PHP para JSON. Nosotros estamos utilizando para estos artículos de desarrolloweb.com las funciones nativas de PHP para JSON, que están disponibles por defecto desde PHP 5.2.
Primero vamos a mostrar un objeto definido con JSON mediante Javascript, para hacer unas comprobaciones y saber si está bien construido.
<script>
var objJson = {
elemento1: "valor1",
elemento2: 22,
elemento3: null,
masCosas: {
voy: "ya",
vengo: "despues"
}
}
alert(objJson.elemento1)
alert(objJson.masCosas.vengo)
</script>
Este script Javascript, ejecutado en un navegador, nos mostraría dos mensajes de alerta con valores que se han colocado en el objeto definido con notación JSON. Esto no tiene nada que ver con lo que vamos a ver sobre PHP, pero al menos tenemos claro que nuestro JSON es correcto.
Ahora vamos a crear una variable PHP con la cadena para hacer este objeto y lo cargaremos en una variable PHP interpretando el JSON. Para ello PHP dispone de una función llamada json_decode() que recibe la cadena con notación JSON y devuelve un objeto, o cualquier otro tipo de variable, que estuviera representada en el JSON.
<?php
$str_obj_json = '{
"elemento1": "valor1",
"elemento2": 22,
"elemento3": null,
"masCosas": {
"voy": "ahora",
"vengo": "ya"
}
}';
$obj_php = json_decode($str_obj_json);
?>
Ahora podríamos mostrar el contenido de esa variable con la función de PHP print_r(), que muestra el contenido de variables de manera que se pueda entender por un humano.
stdClass Object
(
[elemento1] => valor1
[elemento2] => 22
[elemento3] =>
[masCosas] => stdClass Object
(
[voy] => ahora
[vengo] => ya
)
)
Por último podemos intentar acceder a una de las propiedades de este objeto, de esta manera:
echo "Una propiedad cualquiera:" . $obj_php->elemento1;
1) En la cadena JSON, tanto el nombre de una propiedad como el valor deben estar entre comillas, menos los valores numéricos, o palabras como null, que pueden estar sin comillas.
Incorrecto:
$json = json_decode('{nombre: "cualquier valor"}');
Correcto:
$json = json_decode('{"nombre": "cualquier valor"}');
2) Se tienen que utilizar comillas dobles. No se permiten comillas simples para los nombres de variables y sus valores.
Incorrecto:
$json = json_decode("{'frutas': ['pera', 'uva']}");
Correcto:
$json = json_decode('{"frutas": ["pera", "uva"]}');
3) No podemos dejarnos una coma que después no tenga nada, así como un corchete o llave de más o de menos.
Incorrecto:
$json = json_decode('{"nombre": "valor", }');
Correcto:
$json = json_decode('{"nombre": "valor"}');
4) Tenemos que enviar los datos a json_decode() en UTF-8. Si estamos trabajando en iso-8859-1, habría que codificar la cadena en UTF-8 previamente:
Incorrecto:
$json = json_decode('{"mañana": "miércoles"}');
Correcto:
$json = json_decode(utf8_encode('{"mañana": "miércoles"}'));