Вы можете использовать JsonPath
для анализа ответа JSON.Как правило, вы можете получить JsonPath
класс из строки, файла или ответа.
из строки:
JsonPath path = JsonPath.from("json string");
из файла:
JsonPath path = JsonPath.from(new File("path to file"));
из ответа:
Response response; //we get it from RestAssured by calling POST/GET etc
JsonPath path = response.body().jsonPath();
Чтобы получить любой элемент в структуре JSON, как и в вашем случае, мы должны предоставить его JsonPath
.Пример JSON:
{
"data": [
{
"name": "test"
},
{
"name": "test1"
}
]
}
Чтобы получить доступ к элементу в массиве, мы должны знать ВСЕ его родители.Структура выглядит следующим образом:
path.get("parent.child.anotherChild");
С массивами все становится сложнее, потому что мы должны использовать индексы."data"
в приведенном выше примере является массивом.Для доступа к test1
мы будем использовать:
path.get("data[1].name"); //second element in the array
Но это стандартный подход.JsonPath - намного более сильная библиотека.
Наконец, чтобы ответить на ваш вопрос.Как получить количество объектов JSON в массиве?
List<HashMap<String, Object>> jsonObjects = path.getList("data"); //You have to provide name of the Array's parent. In my case, it's `data`
В приведенном выше списке HashMaps у нас есть все объекты JSON в массиве JSON.Таким образом, вы можете использовать несколько способов для подсчета элементов.
Чтобы подсчитать, сколько существует объектов JSON, вы можете просто использовать метод List:
jsonObjects.size();
С тем же списком, мы можем получить *Значение 1036 *, как в вашем примере.Ищем значение HB2345
.
Стандартный for
цикл.Вы можете использовать Streams, если знаете, как.
public String getStateCountryCodeFromCmsContract(String cmsContractValue) {
for (HashMap<String, Object> singleJsonObject : jsonObjects) {
String cmsContract = (String) singleJsonObject.get("cmsContract");
if (cmsContract.equals(cmsContractValue)) {
return (String) singleJsonObject.get("stateCountyCode");
}
}
}
Мы выполняем итерацию по каждому объекту JSON, проверяем значение элемента cmsContract
, и, если оно равно желаемому значению, возвращаем stateCountryCode
значение.
Надеюсь, это поможет!