Funciones de JSON
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)

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

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 Accediendo a propiedades del objecto no válidas

Se puede acceder a elementos del objecto que contienen caracteres no permitidos bajo la convención de nombres de PHP (p.ej. el guión) encapsulando el nombre del elemento entre claves y comillas.

<?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 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

?>

Ejemplo #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.
$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_NONE

Ejemplo #5 json_decode() de enteros largos

<?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 JSON no es JavaScript, pero sí un subconjunto de JavaScript.

Nota:

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
5.4.0 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
5.2.1 Se añadió el soporte para la decodificación JSON de tipos básicos.

Ver también


Funciones de JSON
PHP Manual