JSONオブジェクトの要素の順序が元の順序ではないことに気付きました。
JSONリストの要素についてはどうですか?それらの順序は維持されますか?
JSONオブジェクトの要素の順序が元の順序ではないことに気付きました。
JSONリストの要素についてはどうですか?それらの順序は維持されますか?
回答:
はい、JSON配列内の要素の順序は保持されます。RFC 7159から-JavaScript Object Notation(JSON)データ交換フォーマット (強調鉱山):
オブジェクトは順不同です 0個以上の名前と値のペアのコレクションです。名前は文字列であり、値は文字列、数値、ブール値、null、オブジェクト、または配列です。
配列は、0個以上の値の順序付けられたシーケンスです。
「オブジェクト」と「配列」という用語は、JavaScriptの規則に由来しています。
一部の実装では、JSONオブジェクトの順序も保持されますが、これは保証されません。
実際には、キーのタイプがNaNの場合、ブラウザは順序を変更しません。
次のスクリプトは、「One」、「Two」、「Three」を出力します。
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
一方、次のスクリプトは「3」、「1」、「2」を出力します。
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
一部のJavaScriptエンジンは、キーを挿入順に保持します。たとえば、V8は、符号なし32ビット整数として解析できるキーを除いて、すべてのキーを挿入順に保持します。
これは、次のいずれかを実行した場合を意味します。
var animals = {};
animals['dog'] = true;
animals['bear'] = true;
animals['monkey'] = true;
for (var animal in animals) {
if (animals.hasOwnProperty(animal)) {
$('<li>').text(animal).appendTo('#animals');
}
}
var animals = JSON.parse('{ "dog": true, "bear": true, "monkey": true }');
for (var animal in animals) {
$('<li>').text(animal).appendTo('#animals');
}
V8を使用するChromeでは、一貫して犬、熊、猿の順番で表示されます。Node.jsもV8を使用します。これは、何千ものアイテムがある場合でも当てはまります。YMMVと他のJavaScriptエンジン。
「JSONリストの要素の順序は維持されますか?」良い質問ではありません。「[...]を実行するときにJSONリストの要素の順序は維持されますか?」Felix Kingが指摘したように、JSONはテキスト形式のデータ形式です。理由がなければ変異しません。JSON文字列と(JavaScript)オブジェクトを混同しないでください。
あなたはおそらくのような操作について話しているでしょうJSON.stringify(JSON.parse(...))
。今の答えは:それは実装に依存します。JSONパーサーの99%*はオブジェクトの順序を維持せず、配列の順序を維持しますが、JSONを使用して次のようなものを保存することもできます
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
オブジェクトの順序を維持するパーサーを使用します。
*おそらくさらにもっと:)