json_decode
Decodifica un string de JSON
&reftitle.description;
mixedjson_decode
stringjson
boolassocfalse
intdepth512
intoptions0
Convierte un string codificado en JSON a una variable de PHP.
&reftitle.parameters;
json
El string de json a decodificar.
Esta función sólo trabaja con string codificados en UTF-8.
&json.implementation.superset;
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)
&reftitle.returnvalues;
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.
&reftitle.examples;
Ejemplos de json_decode
]]>
&example.outputs;
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)
}
]]>
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.
{'foo-bar'}; // 12345
?>
]]>
Errores comunes al usar json_decode
]]>
Errores con depth
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(4, 3, -1) as $profundidad) {
var_dump(json_decode($json, true, $profundidad));
echo 'Último error: ', $errores_json[json_last_error()], PHP_EOL, PHP_EOL;
}
?>
]]>
&example.outputs;
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
]]>
json_decode de enteros grandes
]]>
&example.outputs;
float(1.2345678901235E+19)
}
object(stdClass)#1 (1) {
["number"]=>
string(20) "12345678901234567890"
}
]]>
&reftitle.notes;
La especificación de JSON no es JavaScript, pero sí un subconjunto de JavaScript.
En el caso de ocurrir un error durante la decodificación, se puede usar
json_last_error para determinar la naturaleza exacta del mismo.
&reftitle.changelog;
&Version;
&Description;
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.
&reftitle.seealso;
json_encode
json_last_error