Funciones de JSON
PHP Manual

json_decode

(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decodeDecodifica un string de JSON

Descripción

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

Convierte un string codificado en JSON en una variable de PHP.

Parámetros

json

El string de json a decodificar.

Esta función sólo trabaja con strings codificados en UTF-8.

Nota:

PHP implementa un superconjunto de JSON - también codifica y descodifica tipos escalares y NULL. El estándar de JSON solamente admite estos valores cuando están anidados dentro de un array u objeto.

assoc

Cuando es TRUE, los object devueltos serán convertidos a arrays asociativos.

depth

profudidad de recursividad especificada por el usuario.

options

Máscara de bit de opciones de decodificación de JSON. Actualmente solo está soportado JSON_BIGINT_AS_STRING (por defecto convierte enteros grandes en valores de tipo float)

Valores devueltos

Devuelve el valor codificado en json en un tipo de PHP apropiado. Los valores true, false y null son devueltos como TRUE, FALSE y NULL respectivamente. NULL es devuelto si el parámetro json no se puede decodificar o si los datos codificados son más profundos que el límite de recursividad.

Ejemplos

Ejemplo #1 Ejemplos de json_decode()

<?php
$json 
'{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($jsontrue));

?>

El resultado del ejemplo sería:

object(stdClass)#1 (5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

array(5) {
    ["a"] => int(1)
    ["b"] => int(2)
    ["c"] => int(3)
    ["d"] => int(4)
    ["e"] => int(5)
}

Ejemplo #2 Acce a propiedades del objeto no válidas

Se puede acceder a elementos del objeto que contienen caracteres no permitidos por la convención de nombres de PHP (p.ej. el guión) encapsulando el nombre del elemento entre llaves y apóstrofe.

<?php

$json 
'{"foo-bar": 12345}';

$obj json_decode($json);
print 
$obj->{'foo-bar'}; // 12345

?>

Ejemplo #3 Errores comunes al usar json_decode()

<?php

// los siguientes strings son válidos en JavaScript pero no en JSON

// el nombre y el valor deben estar entre comillas dobles
// las comillas simples no son válidas
$bad_json "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// el nombre debe estar entre comillas dobles
$bad_json '{ bar: "baz" }';
json_decode($bad_json); // null

// las comas finales no están permidas
$bad_json '{ bar: "baz", }';
json_decode($bad_json); // null

?>

Ejemplo #4 Errores con depth

<?php
// Codificar los datos.
$json json_encode(
    array(
        
=> array(
            
'Inglés' => array(
                
'One',
                
'January'
            
),
            
'Francés' => array(
            
'Une',
            
'Janvier'
            
)
        )
    )
);

// Definimos los errores.
$constants get_defined_constants(true);
$json_errors = array();
foreach (
$constants["json"] as $name => $value) {
    if (!
strncmp($name"JSON_ERROR_"11)) {
        
$json_errors[$value] = $name;
    }
}

// Mostramos los errores para diferentes profundidades.
foreach (range(43, -1) as $depth) {
    
var_dump(json_decode($jsontrue$depth));
    echo 
'Último error: '$json_errors[json_last_error()], PHP_EOLPHP_EOL;
}
?>

El resultado del ejemplo sería:

array(1) {
  [1]=>
  array(2) {
    ["Inglés"]=>
    array(2) {
      [0]=>
      string(3) "One"
      [1]=>
      string(7) "January"
    }
    ["Francés"]=>
    array(2) {
      [0]=>
      string(3) "Une"
      [1]=>
      string(7) "Janvier"
    }
  }
}
Último error: JSON_ERROR_NONE

NULL
Último error: JSON_ERROR_DEPTH

Ejemplo #5 json_decode() de enteros grandes

<?php
$json 
'{"number": 12345678901234567890}';

var_dump(json_decode($json));
var_dump(json_decode($jsonfalse512JSON_BIGINT_AS_STRING));

?>

El resultado del ejemplo sería:

object(stdClass)#1 (1) {
  ["number"]=>
  float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
  ["number"]=>
  string(20) "12345678901234567890"
}

Notas

Nota:

La espeficación de JSON no es JavaScript, pero sí un subconjunto de JavaScript.

Nota:

En el caso de ocurrir un error durante la decodificación, se puede usar json_last_error() para determinar la naturaleza exacta del error.

Historial de cambios

Versión Descripción
5.6.0 Ya no se aceptan variantes que no estén en minúsculas de los literales true, false y null como entradas válidas, por lo que se generarán advertencias.
5.4.0 Se añadió el parámetro options.
5.3.0 Se añadió el parámetro opcional depth. La profundidad de recursividad por defecto se aumentó de 128 a 512
5.2.3 La profundidad de recursividad por defecto se aumentó de 20 a 128
5.2.1 Se añadió el soporte para la decodificación de JSON de tipos básicos.

Ver también


Funciones de JSON
PHP Manual