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

Соответствует ли последовательность значений в объекте JSON?

У меня есть объект JSON, который я создал в моей программе Java.

JSONObject jObj = {"AAA:aaa","BBB:bbb","CCC:ccc"}

Я отправляю этот объект на сервер, на котором он ожидает объект JSON в следующем типе.

{"BBB:bbb", "AAA:aaa", "CCC:ccc"}

Мой вопрос в том, действительно ли порядок JSON-объекта имеет значение на стороне сервера? Если да, как я могу изменить порядок?

4b9b3361

Ответ 1

Мой вопрос в том, действительно ли порядок объекта JSON имеет значение на стороне сервера?

Значение не должно. Согласно спецификации JSON порядок атрибутов не имеет значения.

К сожалению, есть nitwits out 1 которые игнорируют этот аспект спецификации и придают некоторое значение порядку атрибутов. (Ошибка, как правило, возникает, когда есть разрыв между людьми, определяющими API-интерфейсы и теми, кто их реализует, и люди, выполняющие работу по спецификации, на самом деле не понимают JSON.)

К счастью, есть вероятность, что тот, кто проектировал/реализовал сервер, не допустил этой ошибки. Все парсеры Java JSON, с которыми я столкнулся, не сохраняют порядок атрибутов при разборе по умолчанию. Было бы сложно случайно реализовать сервер, где порядок обработанных атрибутов JSON был значительным.

Если да, как я могу изменить порядок?

С трудом я боюсь:

  • Вы можете создать JSON вручную.
  • Существует хотя бы один JSON для реализации java 2 который позволяет вам предоставить объект Map, который содержит атрибуты объекта JSON. Если вы используете LinkedHashMap или TreeMap, он должен сохранить порядок вставки или лексический порядок ключей атрибутов.

1 - Например, nitwits, над которым работал этот слабый разработчик... fooobar.com/questions/89713/...

2 - JSON-simple: https://code.google.com/p/json-simple/. Могут быть и другие.

Ответ 2

IMHO невозможно.

JSON docs говорит

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

Таким образом, способ получает значения в требуемом порядке, а не упорядочивает json

Ответ 3

Вы можете использовать список, предполагающий, что ваш сервер может его принять:

{"list": [ {"AAA":"aaa"},{"BBB":"bbb"},{"CCC":"ccc"}]}

Ответ 4

public static void jsonpdf()
{
    LinkedHashMap<String,String> lm = new LinkedHashMap<>();
    lm.put("BBB","bbb");
    lm.put("AAA","aaa");
    lm.put("CCC","ccc");
     Gson gson = new Gson();
    String json = gson.toJson(lm);
    System.out.println(json);
}