J'ai remarqué que l'ordre des éléments dans un objet JSON n'était pas l'ordre d'origine.
Qu'en est-il des éléments des listes JSON? Leur commande est-elle maintenue?
la source
J'ai remarqué que l'ordre des éléments dans un objet JSON n'était pas l'ordre d'origine.
Qu'en est-il des éléments des listes JSON? Leur commande est-elle maintenue?
Oui, l'ordre des éléments dans les tableaux JSON est conservé. De RFC 7159 -Le format d'échange de données JSON (JavaScript Object Notation) (accent sur le mien):
Un objet est une collection non ordonnée de zéro ou plusieurs paires nom / valeur, où un nom est une chaîne et une valeur est une chaîne, un nombre, un booléen, une valeur nulle, un objet ou un tableau.
Un tableau est une séquence ordonnée de zéro ou plusieurs valeurs.
Les termes "objet" et "tableau" proviennent des conventions de JavaScript.
Certaines implémentations préservent également l'ordre des objets JSON, mais cela n'est pas garanti.
L'ordre des éléments dans un tableau (
[]
) est conservé. L'ordre des éléments (nom: paires de valeurs) dans un "objet" ({}
) ne l'est pas, et il est habituel qu'ils soient "mélangés", sinon par le formateur / analyseur JSON lui-même, puis par les objets spécifiques au langage (Dictionary, NSDictionary, Hashtable, etc.) qui sont utilisés comme représentation interne.la source
En pratique, si les clés étaient de type NaN, le navigateur ne changera pas l'ordre.
Le script suivant affichera "One", "Two", "Three":
Alors que le script suivant affichera "Trois", "Un", "Deux":
la source
Certains moteurs JavaScript gardent les clés dans l'ordre d'insertion. V8, par exemple, conserve toutes les clés dans l'ordre d'insertion, à l'exception des clés qui peuvent être analysées en tant qu'entiers 32 bits non signés .
Cela signifie que si vous exécutez l'une des opérations suivantes:
Vous obtiendrez systématiquement chien , ours et singe dans cet ordre, sur Chrome, qui utilise le V8. Node.js utilise également V8. Cela restera vrai même si vous avez des milliers d'articles. YMMV avec d'autres moteurs JavaScript.
Démo ici et ici .
la source
"L'ordre des éléments dans une liste JSON est-il conservé?" n'est pas une bonne question. Vous devez demander "L'ordre des éléments dans une liste JSON est-il maintenu lors de l'exécution [...]?" Comme l'a souligné Felix King, JSON est un format de données textuel. Il ne mute pas sans raison. Ne confondez pas une chaîne JSON avec un objet (JavaScript).
Vous parlez probablement d'opérations comme
JSON.stringify(JSON.parse(...))
. Maintenant, la réponse est: cela dépend de la mise en œuvre. 99% * des analyseurs JSON ne maintiennent pas l'ordre des objets et maintiennent l'ordre des tableaux, mais vous pourriez aussi bien utiliser JSON pour stocker quelque chose commeet utilisez un analyseur qui maintient l'ordre des objets.
* probablement encore plus :)
la source