Observez ce petit 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 )
Pourquoi PHP transforme-t-il l'objet JSON en classe?
Un tableau qui est json_encoded
alors ne devrait-il pas json_decoded
donner le même résultat EXACT?
vous donne un tableau.
la source
Pour répondre à la question réelle:
Regardez de plus près la sortie du JSON encodé, j'ai étendu un peu l'exemple que l'OP donne un peu:
Le format JSON est dérivé du même standard que JavaScript ( ECMAScript Programming Language Standard ) et si vous regardez le format, il ressemble à JavaScript. C'est un objet JSON (
{}
= objet ) ayant une propriété "stuff" avec la valeur "things" et une propriété "things" avec sa valeur étant un tableau de chaînes ([]
= array ).JSON (en tant que JavaScript) ne connaît pas les tableaux associatifs uniquement les tableaux indexés. Ainsi, lorsque JSON encodera un tableau associatif PHP, cela se traduira par une chaîne JSON contenant ce tableau comme un "objet".
Maintenant, nous décodons à nouveau le JSON en utilisant
json_decode($arrayEncoded)
. La fonction de décodage ne sait pas d'où provient cette chaîne JSON (un tableau PHP), elle est donc décodée en un objet inconnu, qui eststdClass
en PHP. Comme vous le verrez, le tableau de chaînes "choses" va se décoder en un tableau PHP indexé.Regarde aussi:
Merci à https://www.randomlists.com/things pour les `` choses ''
la source
Bien que, comme mentionné, vous puissiez ajouter un deuxième paramètre ici pour indiquer que vous souhaitez qu'un tableau soit renvoyé:
De nombreuses personnes pourraient préférer diffuser les résultats à la place:
Cela pourrait être plus clair à lire.
la source
tl; dr: JavaScript ne prend pas en charge les tableaux associatifs, donc JSON non plus.
Après tout, c'est JSON, pas JSAAN. :)
PHP doit donc convertir votre tableau en objet pour encoder en JSON.
la source
Si vous décodez le json en tableau, les informations seront perdues dans cette situation.
la source
Il y a aussi une bonne bibliothèque de codage / décodage PHP 4 json (qui est même compatible inverse PHP 5) décrite dans ce billet de blog: Utilisation de json_encode () et json_decode () en PHP4 (juin 2009) .
Le code concret est de Michal Migurski et de Matt Knapp:
la source