#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. Не стесняйтесь принять ответ, если он решит вашу проблему. 👍🏻