> Manuales > Trabajar con JSON desde PHP

Veremos cómo crear objetos o variables PHP a partir de una cadena de texto con notación JSON.

PHP puede interpretar datos provenientes de una cadena con notación JSON, de modo que se puedan guardar en variables y luego utilizarlas en los scripts del lado del servidor. En este articulo veremos cómo hacerlo y además destacaremos una serie de consejos para que los JSON estén bien formados y consigamos una correcta interpretación.

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;

Consejos para hacer un JSON que se pueda interpretar correctamente

La función json_decode() de PHP requiere unas normas un poco más estrictas a la hora de construir un JSON. Si no atendemos esas reglas no obtendremos un mensaje de error, sino que la función devolverá un valor nulo: null. Por tanto, algo que Javascript puede interpretar correctamente puede que no sea así por PHP, así que hay que prestar especial atención sobre una serie de puntos.

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"}'));

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual