Подтвердить что ты не робот

Когда ключи 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);
4b9b3361

Ответ 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 во время обхода в таблицу (я использую списки в моем приложении) и получил отсортированный список сайтов с курсором.

Итак, если вы сохраняете то, что вы получаете с сервера, вы можете просто запросить базу данных для сортировки значений в том порядке, в котором вы хотите.