Когда ключи JsonObject повторяются, они не находятся в том же порядке, что и в ответе с сервера
У меня очень большой ответ от сервера строки JSON. Я преобразовал его в объект JSON, а затем получил ключи и повторил его.
Проблема в том, что когда я повторяю ее, она не находится в том же порядке, что и в ответ от сервера.
Затем я применяю другой метод, добавляя все ключи в List<String>
и сортировку, а затем получаю итератор, но все же это не так, как я требовал (как в ответе).
Пример кода здесь:
JSONObject jsonObject = new JSONObject(responseString);
Iterator<String> myIter = jsonObject.keys();
List<String> sortKey = new ArrayList<String>();
while(myIter.hasNext()){
sortKey.add(myIter.next());
}
Collections.sort(sortKey);
Ответы
Ответ 1
Порядок ключей объекта JSON не должен быть значимым. Если вам нужен конкретный порядок, вы должны использовать массив, а не объект.
Ваш код Java сортирует ключи по алфавиту. Невозможно получить начальный порядок ключей в объекте.
Ссылка 1:
Порядок клавиш undefined
Ссылка 2:
Объект представляет собой неупорядоченный набор пар имя/значение
Ответ 2
Вы можете использовать Сортированную карту для ввода ключей и значений. Что-то вроде этого
public static List listFromJsonSorted(JSONObject json) {
if (json == null) return null;
SortedMap map = new TreeMap();
Iterator i = json.keys();
while (i.hasNext()) {
try {
String key = i.next().toString();
JSONObject j = json.getJSONObject(key);
map.put(key, j);
} catch (JSONException e) {
e.printStackTrace();
}
}
return new LinkedList(map.values());
}
Ответ 3
Я столкнулся с этой аналогичной проблемой, работая над разделом в моем приложении для Android, в котором отображен список из 1024+ сайтов в алфавитном порядке. Поскольку обход json не был отсортирован по порядку, я просто вставил значения json во время обхода в таблицу (я использую списки в моем приложении) и получил отсортированный список сайтов с курсором.
Итак, если вы сохраняете то, что вы получаете с сервера, вы можете просто запросить базу данных для сортировки значений в том порядке, в котором вы хотите.