Wird die Reihenfolge der Elemente in einer JSON-Liste beibehalten?

Ich habe festgestellt, dass die Reihenfolge der Elemente in einem JSON-Objekt nicht der ursprünglichen Reihenfolge entspricht.

Was ist mit den Elementen der JSON-Listen? Wird ihre Reihenfolge beibehalten?

Solutions Collecting From Web of "Wird die Reihenfolge der Elemente in einer JSON-Liste beibehalten?"

Ja, die Reihenfolge der Elemente in JSON-Arrays bleibt erhalten. Von RFC 7159 -Das JavaScript Object Notation (JSON) -Datenaustauschformat (Hervorhebung von mir):

Ein Objekt ist eine ungeordnete Sammlung von null oder mehr Name / Wert-Paaren, wobei ein Name eine Zeichenfolge und ein Wert eine Zeichenfolge, eine Zahl, ein boolescher Wert, ein Nullwert, ein Objekt oder ein Array ist.

Ein Array ist eine geordnete Folge von null oder mehr Werten.

Die Begriffe “Objekt” und “Array” stammen aus den Konventionen von JavaScript.

Die Reihenfolge der Elemente in einem Array ( [] ) wird beibehalten. Die Reihenfolge der Elemente (Name: Wert-Paare) in einem “Objekt” ( {} ) ist nicht, und es ist üblich, dass sie “durcheinander” sind, wenn nicht vom JSON-Formatierer / Parser selbst, dann von den sprachspezifischen Objekten ( B. Dictionary, NSDictionary, Hashtable usw.), die als interne Repräsentation verwendet werden.

Wenn die Schlüssel vom Typ NaN sind, ändert der Browser die Reihenfolge praktisch nicht.

Das folgende Skript gibt “Eins”, “Zwei”, “Drei” aus:

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

Während das folgende Skript “Drei”, “Eins”, “Zwei” ausgibt:

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

Einige JavaScript-Engines behalten Keys in der Reihenfolge der Anzeigen. V8 zum Beispiel behält alle Schlüssel in der Reihenfolge, bis auf die Schlüssel, die als vorzeichenlose 32-Bit-Ganzzahlen analysiert werden können .

Das bedeutet, wenn Sie eine der folgenden Aktionen ausführen:

 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'); }
  • Du erhältst in dieser Reihenfolge immer einen Hund , einen Bären und einen Affen , auf Chrome, der V8 verwendet. Node.js verwendet auch V8. Dies gilt auch, wenn Sie Tausende von Elementen haben. YMMV mit anderen JavaScript-Engines.

    Demo hier und hier .

    “Wird die Reihenfolge der Elemente in einer JSON-Liste beibehalten?” ist keine gute Frage. Sie müssen fragen: “Wird die Reihenfolge der Elemente in einer JSON-Liste beibehalten, wenn […] ausgeführt wird?” Wie Felix King darauf hingewiesen hat, ist JSON ein Textdatenformat. Es mutiert nicht ohne Grund. Verwechseln Sie keine JSON-Zeichenfolge mit einem (JavaScript) -Objekt.

    Sie sprechen wahrscheinlich von Operationen wie JSON.stringify(JSON.parse(...)) . Jetzt lautet die Antwort: Es hängt von der Implementierung ab. 99% * der JSON-Parser pflegen nicht die Reihenfolge der Objekte und behalten die Reihenfolge der Arrays bei, aber Sie können JSON auch zum Speichern von Objekten verwenden

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

    und verwenden Sie einen Parser, der die Reihenfolge der Objekte aufrechterhält.

    * wahrscheinlich noch mehr 🙂