Décoder éparses objet json en php array
Je peux créer un clairsemée tableau php (ou une carte) à l'aide de la commande:
$myarray = array(10=>'hi','test20'=>'howdy');
Je veux sérialiser/désérialiser ce que JSON. Je peux sérialiser l'aide de la commande:
$json = json_encode($myarray);
qui résultats dans la chaîne {"10":"hi","test20":"howdy"}
. Cependant, quand je désérialiser cela, et de le jeter dans un tableau à l'aide de la commande:
$mynewarray = (array)json_decode($json);
Je semble perdre tout correspondances avec les touches qui ne sont pas valides php identifiants. C'est, mynewarray
a cartographie 'test20'=>'howdy'
, mais pas 10=>'hi'
ni '10'=>'hi'
.
Est-il un moyen de préserver les touches numériques dans un php de la carte lors de la conversion et de retour de json à l'aide de la norme json_encode
/json_decode
fonctions?
(J'utilise la Version de PHP 5.2.10-2ubuntu6.4.)
Vous devez vous connecter pour publier un commentaire.
json_decode
retourne un objet de type stdClass par défaut. Vous avez accès à des propriétés (c'est à dire,$result->test20
).10
n'est pas un nom valide pour une propriété, qui est pourquoi vous êtes en train de le perdre.Au lieu de casting pour un tableau, vous pouvez passer
true
comme deuxième argument dejson_decode
pour le faire retourner un tableau associatif lui-même:Si vous le faites,
$mynewarray[10]
fonctionnera très bien.true
est important, pour faire en PHP de type Tableau, d'autrestdClass Object
Quelle version de PHP? Sur 5.2 le programme suivant/script
Sorties
Qui n'affiche pas le comportement que vous décrivez.
Cela dit, si votre version de PHP est miscasting le JSON, essayez d'utiliser get_object_vars sur l'objet stdClass que la fonction json_decode retourne
Qui pourrait revenir à de meilleurs résultats.
[]
opérateur en PHPLe problème est dans la conversion de l'objet de tableau.
Voir comment ce tableau index
"10"
? Mais en PHP, tout ce qui ressemble à un nombre est converti en nombre, en particulier dans les indices de tableau. Vous ne pouvez pas simplement obtenira["10"]
, car il convertit"10"
dans un certain nombre et ce tableau ne dispose pas d'un tel indice.Cependant,
foreach
œuvres.Vous pouvez également traiter le résultat de la fonction json_decode comme un objet. Alors vous ne serez pas en mesure de faire
$a->10
ou$a->"10"
,œuvres.
Mais le plus probable, comme l'a dit Chris, vous voulez juste passer
true
comme deuxième argument.