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. Все, что подходит вам больше всего.
Учитывая приведенный выше код, результаты будут:
1222
Надеюсь, это поможет!
EDIT:
Если вы получили исключение, подобное этому, Невозможно десериализовать объект из-за отсутствия десериализатора JSON в classpath. Пожалуйста, поместите Джексона (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>