Są (hackowe) sposoby, aby to zrobić ... ale nie powinieneś.
W JSON obiekt definiuje się następująco:
Obiekt to nieuporządkowany zestaw par nazwa / wartość.
Zobacz http://json.org .
Większość implementacji JSON nie stara się zachować kolejności par nazwa / wartość obiektu, ponieważ jest ona (z definicji) nieistotna.
Jeśli chcesz zachować porządek, musisz przedefiniować strukturę danych; na przykład
{
"items":
[
[
{"WR":"qwe"},
{"QU":"asd"},
{"QA":"end"},
{"WO":"hasd"},
{"NO":"qwer"}
],
]
}
lub prościej:
{
"items":
[
{"WR":"qwe"},
{"QU":"asd"},
{"QA":"end"},
{"WO":"hasd"},
{"NO":"qwer"}
]
}
FOLLOWUP
Dzięki za informację, ale nie mam innego wyjścia, jak tylko użyć JSON w mojej aplikacji, a moja aplikacja musi zachować kolejność kluczy niezależnie od definicji obiektu JSON ... Nie mogę zmieniać formatu pliku JSON także...
Musisz przeprowadzić trudną rozmowę z kimkolwiek, kto zaprojektował tę strukturę plików i nie pozwoli ci jej zmienić. To jest / oni są po prostu błędne. Ci potrzeba , aby ich przekonać.
Jeśli naprawdę nie pozwolą ci tego zmienić:
- Powinieneś nalegać, aby nie nazywać tego JSON ... bo tak nie jest.
- Powinieneś zwrócić uwagę, że będziesz musiał napisać / zmodyfikować kod specjalnie do obsługi tego formatu "nie JSON" ... chyba że znajdziesz implementację JSON, która zachowuje kolejność. Jeśli są klientami płacącymi, upewnij się, że płacą za dodatkową pracę, którą musisz wykonać.
- Należy zwrócić uwagę, że jeśli „nie JSON” musi być używane przez inne narzędzie, będzie to problematyczne. Rzeczywiście, ten problem będzie się powtarzał ...
Takie rzeczy są naprawdę złe. Z jednej strony Twoje oprogramowanie będzie naruszać dobrze ugruntowaną / długotrwałą specyfikację, której celem jest promowanie interoperacyjności. Z drugiej strony, głupcy, którzy zaprojektowali ten kiepski (nie JSON!) Format pliku, prawdopodobnie obrzucają systemy innych ludzi itp., Ponieważ systemy nie radzą sobie z ich bzdurami.
AKTUALIZACJA
Warto też przeczytać, co mówi na ten temat JSON RFC (RFC 7159) . Oto kilka fragmentów:
W latach od publikacji RFC 4627 JSON znalazł bardzo szerokie zastosowanie. Doświadczenie to ujawniło pewne wzorce, które, choć pozwalają na to specyfikacje, spowodowały problemy z interoperacyjnością.
JavaScript Object Notation (JSON) to format tekstowy służący do serializacji danych strukturalnych. ...
JSON może reprezentować cztery typy pierwotne (ciągi, liczby, wartości logiczne i null) oraz dwa typy strukturalne (obiekty i tablice).
Obiekt to nieuporządkowana kolekcja zawierająca zero lub więcej par nazwa / wartość, gdzie nazwa jest łańcuchem, a wartość jest ciągiem, liczbą, wartością logiczną, wartością null, obiektem lub tablicą.
Zaobserwowano, że biblioteki analizujące JSON różnią się pod względem tego, czy porządkowanie elementów składowych obiektów jest widoczne dla oprogramowania wywołującego. Implementacje, których zachowanie nie zależy od kolejności elementów, będą interoperacyjne w tym sensie, że te różnice nie będą miały na nie wpływu.