Проблема с синтаксическим анализом JSON

#java #json

#java #json

Вопрос:

Привет, я пытаюсь проанализировать следующие данные JSON:

 {"chat":
{"link":
[{"@rel":"next","@ref":"http"}],
"events":
{"link2":
[{"@rel":"next","@ref":"http"}]}
}}
  

Код, который считывает данные (где ‘a’ — это JSON в виде строки):

   JSONObject jsonObject1 = new JSONObject(a);
  JSONObject jsonObject = jsonObject1.getJSONObject("chat");
  

Итак, структура (по крайней мере, так, как я предполагал) такова:

 <chat>
    <link>
    <events>
        <link2>
    </events>
</chat<
  

Но после getJsonObject(«чат») JSONObject равен:

 {"chat":{"events":{"link2":[{"@ref":"http","@rel":"next"}]},"link":[{"@ref":"http","@rel":"next"}]}}
  

Чего я не понимаю? Почему данные переворачиваются и меняется структура?

Комментарии:

1. «Почему данные переворачиваются и меняется структура?» Я не вижу никаких изменений структуры, просто «переворачиваются данные» (например, изменения в порядке отображения свойств). Как указывает msalvadores ниже, в свойствах объекта, представленного JSON, отсутствует порядок. (С сайта JSON : «Объект представляет собой неупорядоченный набор пар имя / значение» ) Чтобы иметь порядок, вы должны использовать упорядочивающую конструкцию (такую как массив). Поскольку единственные массивы в вашей структуре содержат только один элемент, это не очевидно из приведенного выше, но записи массива упорядочены и поэтому не будут перемещаться.

2. @T.J. Crowder, ты должен дать на это ответ.

3. @Lucero: Ну, в основном это просто продолжение ответа msalvadores, поэтому я прокомментировал, а не ответил. Действительно, что я должен был сделать, так это отредактировать ответ msalvadores, чтобы добавить ссылку и цитату или что-то в этом роде, поскольку StackOverflow предназначен для совместной работы. Но я действительно осторожно отношусь к этому (и большинство людей, похоже, ведут себя, вероятно, более осторожно, чем Джефф изначально планировал). Редактировать: И я сделал это сейчас, мы все должны быть более готовы сделать хорошие ответы еще лучше.

Ответ №1:

Свойства в объекте JSON не отсортированы. С сайта JSON:

Объект представляет собой неупорядоченный набор пар имя / значение…

(Мой акцент) Поэтому позиция link и event не имеет значения для анализатора. Нижняя строка, link и event находятся на одном уровне, поэтому их можно сдвинуть, и везде, где важен порядок, используйте массивы в JSON … [] .