1. Обзор
В этом кратком руководстве мы рассмотрим, как использовать JsonPath для подсчета объектов и массивов в документе JSON.
JsonPath предоставляет стандартный механизм для обхода определенных частей документа JSON. Можно сказать, что JsonPath для JSON - это то же, что XPath для XML.
2. Обязательные зависимости
Мы используем следующую JsonPath зависимость Maven, которая, конечно, доступна на https://search.maven.org/classic/#search%7Cga% 7C1% 7Cg% 3A% 22com.jayway.jsonpath% 22[Maven Central]:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
3. Пример JSON
Следующий JSON будет использован для иллюстрации примеров:
{
"items":{
"book":[ {
"author":"Arthur Conan Doyle",
"title":"Sherlock Holmes",
"price":8.99
},
{
"author":"J. R. R. Tolkien",
"title":"The Lord of the Rings",
"isbn":"0-395-19395-8",
"price":22.99
}
],
"bicycle":{
"color":"red",
"price":19.95
}
},
"url":"mystore.com",
"owner":"baeldung"
}
4. Подсчет объектов JSON
Корневой элемент обозначается символом доллара « $» . В следующем тесте JUnit мы вызываем JsonPath.read () с JSON String и путем JSON «$», который мы хотим считать:
public void shouldMatchCountOfObjects() {
Map<String, String> objectMap = JsonPath.read(json, "$");
assertEquals(3, objectMap.keySet().size());
}
Посчитав размер полученной Map, мы узнаем, сколько элементов находится по заданному пути в структуре JSON.
5. Подсчитать размер массива JSON
В следующем тесте JUnit мы запрашиваем JSON, чтобы найти массив, содержащий все books в элементе items :
public void shouldMatchCountOfArrays() {
JSONArray jsonArray = JsonPath.read(json, "$.items.book[** ]");
assertEquals(2, jsonArray.size());
}
6. Заключение
В этой статье мы рассмотрели несколько основных примеров того, как считать элементы в структуре JSON.
Дополнительные примеры путей можно найти в official JsonPath docs
Как всегда, примеры кода можно найти в the GitHub https://github.com/eugenp/tutorials/tree/master/json -path[хранилище].