Saya perhatikan urutan elemen dalam objek JSON bukan urutan aslinya.
Bagaimana dengan elemen daftar JSON? Apakah pesanan mereka dipertahankan?
Saya perhatikan urutan elemen dalam objek JSON bukan urutan aslinya.
Bagaimana dengan elemen daftar JSON? Apakah pesanan mereka dipertahankan?
Jawaban:
Ya, urutan elemen dalam array JSON dipertahankan. Dari RFC 7159 - Notasi Data JavaScript Objek (JSON) Format Pertukaran Data (penekanan tambang):
Objek adalah kumpulan unordered dari nol atau lebih pasangan nama / nilai, di mana nama adalah string dan nilai adalah string, angka, boolean, null, objek, atau array.
Array adalah memerintahkan urutan nol atau lebih nilai.
Istilah "objek" dan "array" berasal dari konvensi JavaScript.
Beberapa implementasi juga mempertahankan urutan objek JSON juga, tetapi ini tidak dijamin.
Urutan elemen dalam array ( []
) dipertahankan. Urutan elemen (nama: pasangan nilai) dalam "objek" ( {}
) tidak, dan itu biasa bagi mereka untuk menjadi "campur aduk", jika bukan oleh formatter / parser JSON itu sendiri maka oleh objek-objek khusus bahasa (Kamus, NSDictionary, Hashtable, dll) yang digunakan sebagai representasi internal.
Secara praktis, jika kunci adalah tipe NaN, browser tidak akan mengubah urutan.
Script berikut akan menampilkan "Satu", "Dua", "Tiga":
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Sedangkan skrip berikut akan menampilkan "Tiga", "Satu", "Dua":
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Beberapa mesin JavaScript menyimpan kunci dalam urutan penyisipan. V8, misalnya, menjaga semua kunci dalam urutan penyisipan kecuali untuk kunci yang dapat diuraikan sebagai bilangan bulat 32-bit yang tidak ditandatangani .
Ini berarti bahwa jika Anda menjalankan salah satu dari berikut ini:
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');
}
Anda akan secara konsisten mendapatkan anjing , beruang , dan monyet dalam urutan itu, di Chrome, yang menggunakan V8. Node.js juga menggunakan V8. Ini akan berlaku bahkan jika Anda memiliki ribuan item. YMMV dengan mesin JavaScript lainnya.
"Apakah urutan elemen dalam daftar JSON dipertahankan?" bukan pertanyaan yang bagus. Anda perlu bertanya "Apakah urutan elemen dalam daftar JSON dipertahankan saat melakukan [...]?" Seperti yang Felix King tunjukkan, JSON adalah format data tekstual. Itu tidak bermutasi tanpa alasan. Jangan bingung string JSON dengan objek (JavaScript).
Anda mungkin berbicara tentang operasi JSON.stringify(JSON.parse(...))
. Sekarang jawabannya adalah: Itu tergantung pada implementasinya. 99% * dari parser JSON tidak mempertahankan urutan objek, dan mempertahankan urutan array, tetapi Anda mungkin juga menggunakan JSON untuk menyimpan sesuatu seperti
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
dan menggunakan parser yang mempertahankan urutan objek.
* mungkin lebih :)