Maison >développement back-end >tutoriel php >Pourquoi « json_encode » convertit-il les tableaux clairsemés en objets JSON ?

Pourquoi « json_encode » convertit-il les tableaux clairsemés en objets JSON ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-25 08:55:12787parcourir

Why Does `json_encode` Convert Sparse Arrays to JSON Objects?

Comprendre l'encodage JSON des tableaux clairsemés

Dans l'encodage JSON, les tableaux clairsemés (tableaux avec des valeurs d'index manquantes) sont une anomalie. En effet, la syntaxe des tableaux de JSON ne prend pas en charge les indices, ce qui rend impossible la représentation directe de tels tableaux.

Question :

Pourquoi json_encode encode-t-il un tableau clairsemé en JSON objet au lieu d'un array?

Réponse :

Le comportement de json_encode avec des tableaux clairsemés provient de l'incapacité de JSON à exprimer de tels tableaux. Lorsque json_encode rencontre un tableau clairsemé, il a recours à son codage en tant qu'objet JSON pour conserver les paires clé-valeur du tableau.

Exemple :

Considérez le PHP code :

$a = array(
    new stdclass,
    new stdclass,
    new stdclass
);
$a[0]->abc = '123';
$a[1]->jkl = '234';
$a[2]->nmo = '567';

echo json_encode($a) . "\n";
unset($a[1]);
echo json_encode($a) . "\n";

Sortie :

[{"abc":"123"},{"jkl":"234"},{"nmo":"567"}]
{"0":{"abc":"123"},"2":{"nmo":"567"}}

Explication :

  • Dans le premier encodage, le tableau clairsemé est représenté comme un tableau JSON valide avec trois objets.
  • Après avoir supprimé l'index 1, le Le tableau clairsemé contient un trou, ce qui oblige json_encode à le convertir en objet JSON pour conserver l'association entre les clés et les valeurs.

Solution :

Pour éviter l'encodage d'un tableau clairsemé en tant qu'objet, vous pouvez utiliser array_values($a) pour obtenir un tableau réindexé sans aucun trou. json_encode l'encodera alors correctement sous forme de tableau JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn