Zauważyłem, że kolejność elementów w obiekcie JSON nie jest pierwotną kolejnością.
Co z elementami list JSON? Czy ich zamówienie jest utrzymane?
javascript
arrays
json
list
użytkownik437899
źródło
źródło
Zachowana jest kolejność elementów w tablicy (
[]
). Kolejność elementów (nazwa: pary wartości) w „obiekcie” ({}
) nie jest, i zwykle są one „pomieszane”, jeśli nie przez sam formatyzator / parser JSON, to przez obiekty specyficzne dla języka (Słownik, NSDictionary, Hashtable itp.), Które są używane jako reprezentacja wewnętrzna.źródło
Praktycznie rzecz biorąc, jeśli klucze byłyby typu NaN, przeglądarka nie zmieni kolejności.
Poniższy skrypt wyświetli „One”, „Two”, „Three”:
Podczas gdy następujący skrypt wyświetli „Three”, „One”, „Two”:
źródło
Niektóre silniki JavaScript utrzymują klucze w kolejności wstawiania. Na przykład V8 utrzymuje wszystkie klucze w kolejności wstawiania, z wyjątkiem kluczy, które można analizować jako 32-bitowe liczby całkowite bez znaku .
Oznacza to, że jeśli uruchomisz jedno z poniższych:
Będziesz konsekwentnie dostawać psa , niedźwiedzia i małpy w tej kolejności w Chrome, który używa V8. Node.js używa również V8. Będzie to prawdą, nawet jeśli masz tysiące przedmiotów. YMMV z innymi silnikami JavaScript.
Demo tutaj i tutaj .
źródło
„Czy zachowana jest kolejność elementów na liście JSON?” to nie jest dobre pytanie. Musisz zapytać „Czy kolejność elementów na liście JSON jest zachowywana podczas wykonywania [...]?” Jak zauważył Felix King, JSON jest formatem danych tekstowych. Nie mutuje bez powodu. Nie należy mylić ciągu JSON z obiektem (JavaScript).
Prawdopodobnie mówisz o takich operacjach
JSON.stringify(JSON.parse(...))
. Teraz odpowiedź brzmi: to zależy od implementacji. 99% * parserów JSON nie utrzymuje kolejności obiektów i utrzymuje porządek tablic, ale równie dobrze możesz użyć JSON do przechowywania czegoś takiegoi użyj parsera, który utrzymuje porządek obiektów.
* prawdopodobnie jeszcze więcej :)
źródło