Использование хэш-карты для создания сложного JSON

#java #json #hashmap #rest-assured

Вопрос:

Я потратил несколько дней на поиск в Интернете различными способами и не вижу ни одного, в котором приводились бы примеры использования HashMap — вместо этого все они ссылаются на Джексона или GSON. Я не могу использовать их, так как они вызывают проблему в Дженкинсе, которая не будет решена (в основном все супер заблокировано, и рабочее место не «откроет» альтернативы).

У меня есть тело JSON, которое я пытаюсь отправить в API создания записей.

Для простого тела JSON процесс довольно прост:

Желаемый JSON:

 {
    "owner": {
        "firstName": "Steve",
        "lastName": "Guy",
        "Hair": "brown",
        "Eyes": "yes"
        "etc": "etc"
    },
    "somethingElse": "sure"
}
 

будет выглядеть так

 Map<String,Object> jsonRequest = new HashMap<>();

Map<String,String> ownerMap = new HashMap<>();
HashMap<Object, String> OwnerMap = new HashMap<Object, String>;
    OwnerMap.put("firstName","Steve");
    OwnerMap.put("lastName","Guy");
    OwnerMap.put("Hair","brown");
    OwnerMap.put("Eyes","yes");
    OwnerMap.put("etc","etc");
jsonRequest.put("owner", OwnerMap);
jsonRequest.put("somethingElse", "sure");
 

Достаточно просто

Если JSON становится немного сложнее, я не могу понять это.. и опять же я не могу использовать для этого какую-либо другую зависимость.

итак, если у меня есть тело JSON, которое мне нужно отправить :

 {
  "customer": {
        "address": [
            {
              "address": "Blah"
             }
          ]
       },
   "anotherThing": "thing"
}
 

та же схема не работает.

 Map<String,Object> jsonRequest = new HashMap<>();

Map<String,String> ownerMap = new HashMap<>();
HashMap<Object, String> addressMap = new HashMap<Object, String>;
    addressmap.put("address","Blah");
jsonRequest.put("address", addressMap);
jsonRequest.put("owner", OwnerMap);
jsonRequest.put("anotherThing", "thing");
 

возвращается как:

 {
    "owner": {

    },
    "anotherThing": "thing",
    "address": {
        "address": "Blah"
    }
}
 

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

1. что такое библиотека JSON? и почему бы не спросить автора, как вести ваше дело?

2. Как вы конвертируете хэш-карту в JSON, если для этого не используете библиотеку? Или вы используете какую-то другую библиотеку, кроме GSON или Jackson?

Ответ №1:

Вы , кажется, предполагаете, что внутренние (за неимением лучшего слова) Map должны быть Map<*, String> , и что Map и String являются единственными вещами, которые extend Object .

Что-то вроде следующего должно хорошо работать:

 Map<String, Object> json = new HashMap<>();

Map<String, Object> customer = new HashMap<>();

// Could make this a Map<String, Object>[] (array) depending
// on json library used...  You don't specify.
List<Map<String, Object>> address = new ArrayList<>();
Map<String, Object> innerAddress = new HashMap<>();
innerAddress.put("address", "Blah");
address.add(innerAddress);

customer.put("address", address);

json.put("customer", customer);
json.put("anotherThing", "thing");
 

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

1. Иными словами, ваш элемент customer.address представляет собой массив JSON. Поэтому вам нужно иметь список карт для этого элемента.

2. ^ Это. Другой подход состоял бы в том, чтобы сделать вашу строку json такой, какой вы хотите, и сериализовать ее, а затем проверить структуру вывода. Но опять же, не зная конкретной библиотеки, вполне возможно, что она только сериализует и не может десериализовать (хотя я был бы удивлен).

3. спасибо вам, Криг и Бундед! Это сработало.

4. Рад это слышать @CatAndPlantGuy. Не стесняйтесь принять ответ, если он решит вашу проблему. 👍🏻