json_decode

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

json_decodeDecodifica un string de JSON

Descripción

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

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

Parámetros

json

El string de json a decodificar.

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

Nota:

PHP implementa un superconjunto de JSON tal como se especifica en la » RFC 7159 original.

assoc

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

depth

Profundidad de recursividad especificada por el usuario.

options

Máscara de bit de opciones de decodificación de JSON. Actualmente solamente está soportada 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 Acceder a propiedades de objeto no válidas

Se puede acceder a elementos de un 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 string 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
$json_erróneo "{ 'bar': 'baz' }";
json_decode($json_erróneo); // null

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

// las comas finales no están permitidas
$json_erróneo '{ bar: "baz", }';
json_decode($json_erróneo); // 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'
            
)
        )
    )
);

// Definir los errores.
$constantes get_defined_constants(true);
$errores_json = array();
foreach (
$constantes["json"] as $nombre => $valor) {
    if (!
strncmp($nombre"JSON_ERROR_"11)) {
        
$errores_json[$valor] = $nombre;
    }
}

// Mostrar los errores para diferentes profundidades.
foreach (range(43, -1) as $profundidad) {
    
var_dump(json_decode($jsontrue$profundidad));
    echo 
'Último error: '$errores_json[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 especificació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 mismo.

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 predeterminada se aumentó de 128 a 512
5.2.3 La profundidad de recursividad predeterminada se aumentó de 20 a 128
5.2.1 Se añadió soporte para la decodificación de JSON de tipos básicos.

Ver también