¿Se conserva el orden de los elementos en una lista JSON?
He notado que el orden de los elementos en un objeto JSON no es el orden original.
¿Qué pasa con los elementos de las listas JSON? ¿Se mantiene su orden?
Sí, se conserva el orden de los elementos en las matrices JSON. De RFC 7159: formato de intercambio de datos de notación de objetos JavaScript (JSON) (el énfasis es mío):
Un objeto es una colección desordenada de cero o más pares nombre/valor, donde un nombre es una cadena y un valor es una cadena, número, booleano, nulo, objeto o matriz.
Una matriz es una secuencia ordenada de cero o más valores.
Los términos "objeto" y "matriz" provienen de las convenciones de JavaScript.
Algunas implementaciones también conservan el orden de los objetos JSON, pero esto no está garantizado.
[]
Se mantiene el orden de los elementos de una matriz ( ). El orden de los elementos (pares nombre:valor) en un "objeto" ( {}
) no lo es, y es habitual que estén "confundidos", si no por el formateador/analizador JSON, entonces por los objetos específicos del lenguaje (Diccionario, NSDictionary, Hashtable, etc) que se utilizan como representación interna.
En la práctica, si las claves fueran del tipo NaN, el navegador no cambiará el orden.
El siguiente script generará "Uno", "Dos", "Tres":
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Mientras que el siguiente script generará "Tres", "Uno", "Dos":
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}