RestAssured
позволяет использовать JsonPath
, который очень полезен при обработке JSON. Вместо работы с путями вы можете преобразовать JSON в объекты Java, и я покажу вам, как именно это сделать.
Итак, ваш JSON начинается с массива элементов. Каждый элемент является объектом JSON. Каждый объект JSON содержит вложенный массив JSON gifts
с объектами JSON. Позвольте мне объяснить дальше.
Сначала нам нужно обработать массив, начало вашего JSON [
. Для этого мы можем создать класс, представляющий этот массив следующим образом:
public class ElementObject { //this name is irrelevant. You can call it whatever you want
public String id; //the names of the variables are relevant
public String type; //each of variable name corresponds to the type and name in the JSON
public List<GiftObject> gifts; //here we handle the nested JSON Array of JSON Objects
}
Теперь нам нужен объект для обработки gifts
. Для этого потребуется еще один класс:
public class GiftObject { //irrelevant name
public String startDate; //relevant name
public String endDate;
public String id;
public String nameAr;
public String nameEn;
}
Теперь все, что нам нужно сделать, это вызвать 1 метод из JsonPath
, чтобы разобрать весь JSON в классы Java. Как это:
response.jsonPath().getObject("", ElementObject[].class);
Это в основном так. Начиная сверху:
[
{
"id":1222,
"type":"WITHIN_TRANSACTION",
У нас есть массив JSON с объектами JSON. 1 объект JSON равен 1 экземпляру класса ElementObject
. Все объекты из массива будут проанализированы в ElementObject[].class
, а JsonPath создаст экземпляр, используя Java Reflection
(вам не нужно об этом беспокоиться).
"gifts": [ { "startDate": "2019-06-26", "endDate": "2019-06-26", "id": 26130, "nameAr": "abcd201957261140057", "nameEn": "abcd201957261140057",
Каждый из подарков будет проанализирован в новый экземпляр GiftObject
и сохранен в List<GiftObject>
в классе ElementObject
.
Все, что нам нужно сделать сейчас, это поработать над нашими классами Java.
Чтобы полностью ответить на ваш вопрос - вам нужно значение идентификатора на основе gifts.nameEn
for (ElementObject element : elements) {
for (GiftObject gift : element.gifts) {
if (gift.nameEn.equals("abcd201957261140057")) {
System.out.println(element.id);
}
}
}
Приведенный выше цикл for
можно легко заменить методом или Java Streams. Все, что подходит вам больше всего.
Учитывая приведенный выше код, результаты будут такими:
1222
Надеюсь, поможет!
EDIT: Если вы получаете исключение, подобное этому, невозможно десериализовать объект из-за отсутствия десериализатора JSON, найденного в пути к классам. Пожалуйста, укажите Jackson (Databind) или Gson в пути к классам. все, что вам нужно сделать, это добавить jackson-databind в Maven. Rest Assured может использовать привязку данных Gson или Jackson для преобразования JSON в классы Java. Все, что вам нужно, это зависимость, и все готово.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
person
Fenio
schedule
01.07.2019
gifts.nameEn
- person Fenio   schedule 01.07.2019