Как построить сложную структуру JSON, используя Map <String, String> в Java - PullRequest
0 голосов
/ 16 мая 2011

Я борюсь с аналогичной ошибкой 403, обнаруженной в этом вопросе

В итоге я делаю то, что должно быть простым HTTP POST с данными json в качестве тела http,Вместо ответа 200 я получаю 403, и прежде чем углубиться в вопрос о том, почему я подумал, что приму совет пользователя в вопросе, на который я ссылаюсь, и создам строку json вручную, используя эту структуру Map.Единственная проблема заключается в том, что я не уверен, как это сделать для сложной структуры, подобной приведенной ниже (если карта содержит карты, например)

{"context":{"locationdata":{"lat":41.5816456,"lng":-93.62431329999998}},"results":{"less":150,"on":true,"off":true,"status":true,"working":true,"item":[1111]}}

Заранее спасибо

1 Ответ

1 голос
/ 16 мая 2011

Над проектом, над которым я работал, когда мы создали наш собственный инструмент генерации json, и сделали что-то очень похожее. Карты представляют собой объект-литералы, а списки представляют собой массивы. Таким образом, у нас были карты, у которых были списки, у которых были карты. Наша утилита проверила бы тип каждого свойства, и если бы это был список, вызовите один метод, а если бы это была карта, то вызовите другой метод, рекурсивно. У нашего утилиты были такие методы, как

public String writeJson(Map map, String json) {
   /*
      Code that looped thru the entries of the map and determined whether to 
      1.  add a property to the String for a simple type
      2.  recurse into this method if the entry contained a Map
      3.  call writeJson(list) if the entry contained  a List
   */
}

public String writeJson(List list, String json) {
   // same comment as above
}

Если вы хотите свернуть свои собственные, то то, что вы пытаетесь сделать, возможно, даже для глубоко вложенных структур. Наш утилит был около 100 строк кода. Однако теперь для этого существуют хорошие сторонние библиотеки.

Обратите внимание, что в названии вашего вопроса вы упоминаете Map<String, String>. Вам придется изменить его на что-то вроде Map<String, ?> или Map<String, Collection>, поскольку значения на карте определенно не могут быть ограничены строками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...