RestAssured
использует мощную библиотеку под названием JsonPath
, которую вы уже использовали.
Разница в том, что вы уже создали, заключается в том, как получить JSONObject / Array внутри другого JSONObject / Array
Вы использовали resp.getBody().jsonPath().getList("list");
, что является почти хорошей отправной точкой. Вместо использования List<String>
вы должны использовать List<HashMap<String, Object>>
Каждый HashMap<>
будет объектом JSON.
Тогда вы можете просто перебрать массив, чтобы получить каждый объект и температуру.
Как это сделать:
List<HashMap<String, Object>> list = resp.getBody().jsonPath().getList("list");
for (HashMap<String, Object> jsonObject : list) {
/**
* Now, in order to get temperature, we have to get access to `main` element in JSON and then get access to the temperature
**/
HashMap<String, Object> mainElements = (HashMap<String, Object>) jsonObject.get("main");
//No we have JSONObject as HashMap. We can access any temperature
float temperature = (float) mainElements.get("temp");
System.out.println(temperature);
}
Приведенный выше код напечатает все температуры. Теперь вам просто нужно сравнить значения с плавающей запятой, сохранить их, установить их или сделать все, что вы хотите:)
При таком подходе вы можете получить доступ к любому значению
EDIT:
Извлеките приведенный выше код в метод, подобный этому:
private List<HashMap<String, Object>> getJsonObjectsWithTempGreaterThan(JsonPath path, float degrees) {
List<HashMap<String, Object>> desiredJsonObjects = new ArrayList<>();
List<HashMap<String, Object>> list = path.getList("list");
for (HashMap<String, Object> jsonObject : list) {
HashMap<String, Object> mainElements = (HashMap<String, Object>) jsonObject.get("main");
float temperature = (float) mainElements.get("temp");
if (temperature > degrees) {
desiredJsonObjects.add(jsonObject);
}
}
return desiredJsonObjects;
}
Приведенный выше код будет хранить каждый объект JSON в списке, а затем возвращать его. Список будет содержать объекты JSON с температурой, превышающей градусы, переданные в параметре.
Затем вы можете получить доступ к таким элементам, как это:
List<HashMap<String, Object>> objects = getJsonObjectsWithTempGreaterThan(path, 20);
Это наш список желаемых объектов.
Если вы просто хотите температуру, все, что вам нужно сделать, это:
for (HashMap<String, Object> jsonObject : objects) {
HashMap<String, Object> mainElements = (HashMap<String, Object>) jsonObject.get("main");
//No we have JSONObject as HashMap. We can access any temperature
float temperature = (float) mainElements.get("temp");
System.out.println(temperature);
}
Это может быть достигнуто гораздо проще и читаемее с помощью Java Streams.