Consumir un JSON desde PHP

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

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Felipe

13/3/2013
Y como consumes un json que proviene desde un webservice del otro lado del mundo???
Tu ejemplo vale hongo, de que sirve crear un Json desde el mismo php??

Lucas

20/4/2014
Buena explicacion
Me resulto muy bien, perfectamente claro como para empezar a tener nociones básicas de JSON. Gracias!!

Crisman

05/10/2014
Puedo enviar un parámetro por Post, como lo consumo en el php
yo enviaría esto :
var objJson = {
elemento1: "valor1",
elemento2: 22,
elemento3: null,
masCosas: {
voy: "ya",
vengo: "despues"
}
}
$.ajax({
async: true,
data: objJson,
url: "php/Funcionarios/CargDatPerso.php",
type: "post",
dataType: "json",
error:function(response){
alert("ERROR al ejecutar el jSon");
},
success:function(response){
alert (response.elemento1);
}
});

Eso se podrá hacer, la pregunta es como agarro ese objeto en el php?

Humberto

28/9/2015
Ayuda!
Hola, amigos no puedo manipular esto:
{ "success":true,
"items":[
{ "apellidos":"RONDON MAMANI",
"nombres":"MILAGROS",
"documento_numero":"70377296",
"codigo":"102731",
"escuela":"CIENCIAS CONTABLES",
"matricula":"2015-II"
}
]
}

ekup

07/3/2016
Inútil
En ningun momento explicas como consumir el JSON, solo muestras como crearlo y eso no va de acuerdo al titulo del post