2015-07-30 1 views
4

У меня есть карта, содержащая строковые ключи и значения String и integers. Я положил значения на карту следующим образом:JSONObject отсортированные параметры карты

Map map = new LinkedHashMap(); 
map.put("b", 1); 
map.put("a", 2); 

После этого я добавил карту в список:

List out = new LinkedList(); 
out.add(map); 

И после этого, я создал JSONObject и поместить список в это:

org.json.JSONObject json = new org.json.JSONObject(); 
json.put("header", "header"); 
json.put("array", out); 

Но если я это сделаю, я вижу эту JSon структуру:

{ "заголовок": "заголовок", "массив": [{ "а": 2, "б": 1}]}

Но я хочу видеть:

{"header": "header", "array": [{"b": 1, "a": 2}]}

Где я ошибся? Может быть, это не правильный путь?

+2

Символ 'JSONObject' не поддерживает порядок. Таким образом, оба выхода одинаковы. Почему вы хотите увидеть его в определенном порядке? – Codebender

+0

@Codebender, потому что наш клиент хочет его – Giymose

+0

Убедитесь, что вы создали позицию для задачи в своем счете. «Пункт 507: Бесконечное переупорядочение объектов JSON, $ 1200,00» – TeasingDart

ответ

0

Ошибка. JSON по умолчанию сортирует сверстников в алфавитном порядке. Поскольку каждый термин явно указан, порядок не имеет никакого значения. «b = 1» и «a = 2» в обоих случаях.

+0

[Duplicate] (http://stackoverflow.com/questions/3330989/order-of-serialized-fields-using-json-net) содержит больше информации. – TeasingDart

+0

так, я не могу данные в JSON в правильной последовательности мне нужно? – Giymose

+0

Короткий ответ: Нет. Дольше. Зачем вам это нужно? Это не имеет никакого значения для JSON. Длинный ответ: Да, все возможно. См. Ссылку выше. – TeasingDart

2

Если вы хотите сохранить заказ, вы не должны использовать библиотеку org.json, поскольку она хранит данные в HashMap, поэтому любой заказ, который вы хотите сохранить, будет игнорироваться. Нет простого способа исправить это с помощью org.json. Я предлагаю вам использовать другую библиотеку JSON (GSON, Jackson, minimal-json и т. Д.). Почти любая другая библиотека сохраняет порядок вставки, например LinkedHashMap.

+0

Можете ли вы дать мне совет о GSON или Джексоне и какой-нибудь светлый пример? – Giymose

+0

@Giymose, проверьте [этот вопрос] (http://stackoverflow.com/q/12539489/4856258) для Джексона. Я лично использую минимальный json. –

+0

Thanks У вас есть симпатичный пример minimal-json? Если я хочу передать этот объект в org.json.JSONObject - будет ли он правильным? – Giymose

0

Вы не можете сохранить заказ на Карте с помощью JSONObject.

Если это осуществимо, то я бы предложил использовать List (так как он поддерживает порядок) и подготовить карту на стороне клиента для, например, в java-скрипте.

См Array of objects vs Object of Objects

Смежные вопросы