Orijinal sipariş olmayan bir JSON nesnesindeki öğelerin sırasını fark ettim.
JSON listelerinin öğeleri ne olacak? Emirleri korunuyor mu?
Orijinal sipariş olmayan bir JSON nesnesindeki öğelerin sırasını fark ettim.
JSON listelerinin öğeleri ne olacak? Emirleri korunuyor mu?
Yanıtlar:
Evet, JSON dizilerindeki öğelerin sırası korunur. Gönderen RFC 7159 -The JavaScript Object Notation (JSON) Veri Değişim Biçimi (vurgu benim):
Nesne, bir adın bir dize ve bir değerin bir dize, sayı, boole, null, nesne veya dizi olduğu sıfır veya daha fazla ad / değer çiftinin sırasız bir koleksiyonudur.
Dizi, sıfır veya daha fazla değerin sıralı bir dizisidir.
"Nesne" ve "dizi" terimleri JavaScript kurallarından gelir.
Bazı uygulamalar JSON nesnelerinin sırasını da korur, ancak bu garanti edilmez.
Bir dizideki ( []
) öğelerin sırası korunur. Bir "nesne" ( {}
) içindeki öğelerin sırası (isim: değer çiftleri) değildir ve JSON formatlayıcı / ayrıştırıcının kendisi tarafından değilse, dile özgü nesneler (Sözlük, NSDictionary, Hashtable, vb.) İçerir.
Pratik olarak, tuşlar NaN türündeyse, tarayıcı sırasını değiştirmez.
Aşağıdaki komut dosyası "Bir", "İki", "Üç" çıktısını verecektir:
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Aşağıdaki komut dosyası "Üç", "Bir", "İki" çıktısını verir:
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Bazı JavaScript motorları anahtarları ekleme sırasında tutar. Örneğin V8, imzasız 32 bit tamsayı olarak ayrıştırılabilen anahtarlar dışındaki tüm anahtarları ekleme sırasında tutar .
Bu, aşağıdakilerden birini çalıştırırsanız anlamına gelir:
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 kullanan Chrome'da sürekli olarak bu sırayla köpek , ayı ve maymun alacaksınız . Node.js ayrıca V8 kullanır. Binlerce öğeniz olsa bile bu geçerli olacaktır. Diğer JavaScript motorlarıyla YMMV.
"JSON listesindeki öğelerin sırası korunuyor mu?" iyi bir soru değil. "[...] yaparken bir JSON listesindeki öğelerin sırası korunur mu?" Sorusunu sormanız gerekir. Felix King'in işaret ettiği gibi JSON metinsel bir veri formatıdır. Sebepsiz değişmez. JSON dizesini (JavaScript) nesnesiyle karıştırmayın.
Muhtemelen gibi operasyonlardan bahsediyorsunuz JSON.stringify(JSON.parse(...))
. Şimdi cevap: Bu uygulamaya bağlıdır. JSON ayrıştırıcılarının% 99'u * nesnelerin sırasını korumaz ve dizilerin sırasını korur, ancak JSON'u aşağıdaki gibi bir şeyi saklamak için de kullanabilirsiniz
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
ve nesnelerin sırasını koruyan bir ayrıştırıcı kullanın.
* muhtemelen daha da fazla :)