JSON Funciones
PHP Manual

json_decode

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

json_decodeDecodifica un string 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 PHP.

Parámetros

json

El string json a ser decodificado.

Esta función sólo funciona con datos codificados en UTF-8.

assoc

Cuando es TRUE, los objects retornados se convertirán en arrays asociativos.

depth

Máxima profudidad de recursión.

options

Opciones de decodificación Bitmask de JSON. Actualmente solo JSON_BIGINT_AS_STRING está soportado (por defecto castea enteros largos como flotantes)

Este cambio existe en la versión de desarrollo de PHP, y seguramente existirá después de la versión 5.3.

Valores devueltos

Retorna el valor codificado de json en un tipo PHP apropiado. Los valores true, false y null (case-insensitive) se retornan como TRUE, FALSE y NULL respectivamente. NULL se retorna si no se puede decodificar json o si los datos superan el límite de profundidad de recursión indicado por depth.

Ejemplos

Example #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)
}

Example #2 Otro ejemplo

<?php

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

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

?>

Example #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 rodearse por dobles comillas
// las comillas simples no son válidas
$bad_json "{ 'bar': 'baz' }";
json_decode($bad_json); // null

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

// las comas finales no se permiten
$bad_json '{ bar: "baz", }';
json_decode($bad_json); // null

?>

Example #4 Errores de depth

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

// Definimos los errores.
$json_errors = array(
    
JSON_ERROR_NONE => 'No ha ocurrido ningún error',
    
JSON_ERROR_DEPTH => 'Se ha excedido la máxima profundidad de la pila',
    
JSON_ERROR_CTRL_CHAR => 'Error de carácter de control, posiblemente esté mal codificado',
    
JSON_ERROR_SYNTAX => 'Error de sintaxis',
);

// 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: No ha ocurrido ningún error

NULL
último error: Se ha excedido la máxima profundidad de la pila

Example #5 json_decode() de enteros largos

<?php
$json 
'12345678901234567890';

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

?>

El resultado del ejemplo sería:

float(1.2345678901235E+19)
string(20) "12345678901234567890"

Notas

Note:

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

Note:

En el caso de error al decodificar, json_last_error() se puede usar para determinar la naturaleza exacta del error.

Historial de cambios

Versión Descripción
Futuro Se añadió el parámetro options.
5.3.0 Añadido el parámetro opcional depth. La profundidad de recursión por defecto se incrementó de 128 a 512
5.2.3 La profundidad de recursión por defecto se incrementó de 20 a 128

Ver también


JSON Funciones
PHP Manual