L’ordine degli elementi in un elenco JSON è preservato?

Ho notato che l’ordine degli elementi in un object JSON non è l’ordine originale.

Che mi dici degli elementi delle liste JSON? Il loro ordine è mantenuto?

Sì, l’ordine degli elementi negli array JSON viene mantenuto. Da RFC 7159 -Il formato di interscambio dati JSON (JavaScript Object Notation) (enfasi mia):

Un object è un insieme non ordinato di zero o più coppie nome / valore, dove un nome è una stringa e un valore è una stringa, un numero, un booleano, un null, un object o un array.

Una matrice è una sequenza ordinata di zero o più valori.

I termini “object” e “matrice” derivano dalle convenzioni di JavaScript.

Viene mantenuto l’ordine degli elementi in un array ( [] ). L’ordine degli elementi (nome: coppie di valori) in un “object” ( {} ) non lo è, ed è normale che siano “confusi”, se non dal formatterer / formattatore JSON stesso quindi dagli oggetti specifici della lingua ( Dizionario, NSDictionary, Hashtable, ecc.) Utilizzati come rappresentazione interna.

In pratica, se le chiavi fossero di tipo NaN, il browser non cambierà l’ordine.

Il seguente script mostrerà “Uno”, “Due”, “Tre”:

 var foo={"3":"Three", "1":"One", "2":"Two"}; for(bar in foo) { alert(foo[bar]); } 

Mentre il seguente script mostrerà “Tre”, “Uno”, “Due”:

 var foo={"@3":"Three", "@1":"One", "@2":"Two"}; for(bar in foo) { alert(foo[bar]); } 

Alcuni motori JavaScript mantengono le chiavi nell’ordine di inserimento. V8, ad esempio, mantiene tutte le chiavi nell’ordine di inserimento tranne le chiavi che possono essere analizzate come interi a 32 bit senza segno .

Ciò significa che se si esegue una delle seguenti operazioni:

 var animals = {}; animals['dog'] = true; animals['bear'] = true; animals['monkey'] = true; for (var animal in animals) { if (animals.hasOwnProperty(animal)) { $('
  • ').text(animal).appendTo('#animals'); } }
  •  var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }'); for (var animal in animals) { $('
  • ').text(animal).appendTo('#animals'); }
  • Otterrai costantemente cane , orso e scimmia in questo ordine, su Chrome, che utilizza V8. Node.js utilizza anche V8. Questo vale anche se hai migliaia di oggetti. YMMV con altri motori JavaScript.

    Demo qui e qui .

    “L’ordine degli elementi in un elenco JSON è mantenuto?” non è una buona domanda Devi chiedere “È mantenuto l’ordine degli elementi in un elenco JSON quando si fa […]?” Come Felix King ha sottolineato, JSON è un formato di dati testuali. Non muta senza una ragione. Non confondere una stringa JSON con un object (JavaScript).

    Probabilmente stai parlando di operazioni come JSON.stringify(JSON.parse(...)) . Ora la risposta è: dipende dall’implementazione. Il 99% * dei parser JSON non mantiene l’ordine degli oggetti e mantiene l’ordine degli array, ma si potrebbe anche usare JSON per memorizzare qualcosa come

     { "son": "David", "daughter": "Julia", "son": "Tom", "daughter": "Clara" } 

    e usa un parser che mantiene l’ordine degli oggetti.

    * probabilmente ancora di più 🙂