Czy kolejność elementów na liście JSON jest zachowana?
Zauważyłem, że kolejność elementów w obiekcie JSON nie jest pierwotną kolejnością.
A co z elementami list JSON? Czy ich kolejność jest utrzymana?
5 answers
Tak, kolejność elementów w tablicach JSON jest zachowana. Od RFC 7159-format wymiany danych JavaScript Object Notation (JSON) (podkreślenie):
Obiekt jest nieuporządkowanym zbiorem o zerowej lub większej liczbie nazw/wartości pary, gdzie nazwa jest łańcuchem, a wartość jest łańcuchem, liczba, boolean, null, object lub array.
Tablica jest uporządkowaną sekwencją zero lub więcej wartości.
Terminy "obiekt" i "tablica" pochodzą z Konwencji JavaScript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-19 06:34:07
Kolejność elementów w tablicy ([]
) jest zachowana. Kolejność elementów (nazwa: pary wartości) w" obiekcie "({}
) nie jest, i zwykle są one "pomieszane", jeśli nie przez sam formatator/parser JSON, to przez obiekty specyficzne dla języka (Słownik, Nsdictionary, Hashtable, itp.), które są używane jako wewnętrzna reprezentacja.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-27 11:45:22
Praktycznie rzecz biorąc, jeśli klucze były typu NaN, przeglądarka nie zmieni kolejności.
Następujący skrypt wyświetli "Jeden"," Dwa","Trzy":
var foo={"3":"Three", "1":"One", "2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Natomiast następujący skrypt wyświetli "trzy", "jeden", "dwa":
var foo={"@3":"Three", "@1":"One", "@2":"Two"};
for(bar in foo) {
alert(foo[bar]);
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-27 08:28:50
Niektóre silniki JavaScript zachowują klucze w kolejności wstawiania. Na przykład V8 zachowuje wszystkie klucze w kolejności wstawiania, z wyjątkiem kluczy, które mogą być przetwarzane jako niepodpisane 32-bitowe liczby całkowite .
Oznacza to, że jeśli uruchomisz jedną z następujących opcji:
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');
}
Będziesz konsekwentnie dostawał psa, bear imonkey w tej kolejności na Chrome, który używa V8. Węzeł.js używa również V8. Będzie to prawdą, nawet jeśli masz tysiące przedmiotów. YMMV z innymi Silniki JavaScript.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-02 15:15:48
" czy kolejność elementów w liście JSON jest zachowana?"to nie jest dobre pytanie. Musisz zapytać " to kolejność elementów na liście JSON utrzymywana podczas wykonywania [...] ?" Jak zauważył Felix King, JSON jest formatem danych tekstowych. Nie mutuje bez powodu. Nie należy mylić łańcucha JSON z obiektem (JavaScript).
Prawdopodobnie mówisz o takich operacjach jak JSON.stringify(JSON.parse(...))
. Teraz odpowiedź brzmi: to zależy od wdrożenia. 99% * parserów JSON nie utrzymuje kolejności obiektach, i zachowują kolejność tablic, ale równie dobrze możesz użyć JSON do przechowywania czegoś takiego jak
{
"son": "David",
"daughter": "Julia",
"son": "Tom",
"daughter": "Clara"
}
I używać parsera, który utrzymuje porządek obiektów.
*prawdopodobnie nawet więcej :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-27 13:12:52