(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Decodifica uma string JSON
Recebe uma string codificada em JSON e converte em um valor do PHP.
json
A stringjson
a ser decodificada.
Esta função funciona apenas com strings codificadas em UTF-8.
Nota:
O PHP implementa um superconjunto de JSON conforme especificado na » RFC 7159 original.
associative
Quando true
, objetos JSON serão retornados como arrays associativo; quando false
, objetos JSON serão retornados como objects. Quando null
, objetos JSON serão retornados como arrays ou objects dependendo se flags
JSON_OBJECT_AS_ARRAY
estiver definida.
depth
Profundidade máxima da estrutura que será decodificada. O valor deve ser maior que 0
, e menor ou igual a 2147483647
.
flags
Máscara de bits de JSON_BIGINT_AS_STRING
, JSON_INVALID_UTF8_IGNORE
, JSON_INVALID_UTF8_SUBSTITUTE
, JSON_OBJECT_AS_ARRAY
, JSON_THROW_ON_ERROR
. O comportamento dessas constantes é descrito na página de constantes JSON.
Retorna o valor codificado em json
como um tipo apropriado do PHP. Valores sem aspas true
, false
e null
são retornados como true
, false
e null
respectivamente. null
é retornado se o json
não puder ser decodificado ou se os dados codificados tiverem profundidade maior que o limite de aninhamento.
Se a depth
estiver fora do intervalo permitido, um ValueError é lançado a partir do PHP 8.0.0, enquanto anteriormente, era gerado um erro do nível E_WARNING
.
Versão | Descrição |
---|---|
7.3.0 | Foi adicionado JSON_THROW_ON_ERROR em flags |
7.2.0 | associative agora é nullable. |
7.2.0 | Foi adicionado JSON_INVALID_UTF8_IGNORE , e JSON_INVALID_UTF8_SUBSTITUTE em flags . |
7.1.0 | Uma chave JSON vazia ("") pode ser codificada para a propriedade vazia de objeto, em vez de usar uma chave com o valor _empty_ . |
Exemplo #1 json_decode() exemplos
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
O exemplo acima produzirá:
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) }
Exemplo #2 Acessando propriedades inválidas do objeto
Acessar elementos dentro de um objeto que contém caracteres não permitidos pela convenção de nomenclatura do PHP (por exemplo, o hífen) pode ser realizado encapsulando o nome do elemento entre chaves e apóstrofo.
<?php
$json = '{"foo-bar": 12345}';
$obj = json_decode($json);
print $obj->{'foo-bar'}; // 12345
?>
Exemplo #3 erros comuns usando json_decode()
<?php
// as seguintes strings são JavaScript válidas, mas não JSON válidos
// o nome e o valor devem ser colocados entre aspas duplas
// aspas simples não são válidas
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null
// o nome deve ser colocado entre aspas duplas
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null
// virgulas à direita não são permitidas
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null
?>
Exemplo #4 erros de depth
<?php
// Codifica alguns dados com uma profundidade máxima de 4 (array -> array -> array -> string)
$json = json_encode(
array(
1 => array(
'English' => array(
'One',
'January'
),
'French' => array(
'Une',
'Janvier'
)
)
)
);
// Mostrar os erros para diferentes profundidades.
var_dump(json_decode($json, true, 4));
echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
var_dump(json_decode($json, true, 3));
echo 'Last error: ', json_last_error_msg(), PHP_EOL, PHP_EOL;
?>
O exemplo acima produzirá:
array(1) { [1]=> array(2) { ["English"]=> array(2) { [0]=> string(3) "One" [1]=> string(7) "January" } ["French"]=> array(2) { [0]=> string(3) "Une" [1]=> string(7) "Janvier" } } } Last error: No error NULL Last error: Maximum stack depth exceeded
Exemplo #5 json_decode() de inteiros grandes
<?php
$json = '{"number": 12345678901234567890}';
var_dump(json_decode($json));
var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));
?>
O exemplo acima produzirá:
object(stdClass)#1 (1) { ["number"]=> float(1.2345678901235E+19) } object(stdClass)#1 (1) { ["number"]=> string(20) "12345678901234567890" }
Nota:
A especificação JSON não é JavaScript, mas um subconjunto de JavaScript.
Nota:
No caso de falha na decodificação, json_last_error() pode ser usado para determinar a exata natureza do erro.