Observe este pequeno script:
$array = array('stuff' => 'things');
print_r($array);
//prints - Array ( [stuff] => things )
$arrayEncoded = json_encode($array);
echo $arrayEncoded . "<br />";
//prints - {"stuff":"things"}
$arrayDecoded = json_decode($arrayEncoded);
print_r($arrayDecoded);
//prints - stdClass Object ( [stuff] => things )
Por que o PHP transforma o objeto JSON em uma classe?
Uma matriz que é, json_encoded
então, não deveria json_decoded
produzir o mesmo resultado EXATO?
fornece uma matriz.
fonte
Para responder à pergunta real:
Dê uma olhada na saída do JSON codificado, estendi um pouco o exemplo que o OP está fornecendo:
O formato JSON foi derivado do mesmo padrão do JavaScript ( ECMAScript Programming Language Standard ) e se você olhar para o formato, parece JavaScript. É um objeto JSON (
{}
= objeto ) que tem uma propriedade "stuff" com o valor "things" e tem uma propriedade "things" com seu valor sendo um array de strings ([]
= array ).JSON (como JavaScript) não conhece arrays associativos, apenas arrays indexados. Portanto, ao codificar JSON um array associativo PHP, isso resultará em uma string JSON contendo esse array como um "objeto".
Agora estamos decodificando o JSON novamente usando
json_decode($arrayEncoded)
. A função de decodificação não sabe de onde essa string JSON se originou (uma matriz PHP), então ela está decodificando em um objeto desconhecido, que estástdClass
no PHP. Como você verá, o array "coisas" de strings IRÁ decodificar em um array PHP indexado.Veja também:
Obrigado a https://www.randomlists.com/things pelas 'coisas'
fonte
Embora, conforme mencionado, você possa adicionar um segundo parâmetro aqui para indicar que deseja que uma matriz seja retornada:
Muitas pessoas podem preferir lançar os resultados em vez disso:
Pode ser mais claro de ler.
fonte
tl; dr: JavaScript não oferece suporte a matrizes associativas, portanto, nem JSON.
Afinal, é JSON, não JSAAN. :)
Portanto, o PHP precisa converter seu array em um objeto para codificar em JSON.
fonte
Se você decodificar o json em array, as informações serão perdidas nesta situação.
fonte
Há também uma boa biblioteca de codificação / decodificação json do PHP 4 (que é até compatível com o reverso do PHP 5) escrita nesta postagem do blog: Usando json_encode () e json_decode () no PHP4 (junho de 2009) .
O código concreto é de Michal Migurski e Matt Knapp:
fonte