«1. Обзор
В этом кратком руководстве мы рассмотрим, как использовать JsonPath для подсчета объектов и массивов в документе JSON.
JsonPath предоставляет стандартный механизм для просмотра определенных частей документа JSON. Можно сказать, что JsonPath для JSON — это то же самое, что XPath для XML.
2. Требуемые зависимости
Мы используем следующую зависимость JsonPath Maven, которая, конечно же, доступна на 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 и путем JSON «$», который мы хотим подсчитать:
public void shouldMatchCountOfObjects() {
Map<String, String> objectMap = JsonPath.read(json, "$");
assertEquals(3, objectMap.keySet().size());
}
Подсчитав размер результирующей карты, мы знаем сколько элементов находится по заданному пути в структуре JSON.
5. Подсчет размера массива JSON
В следующем тесте JUnit мы запрашиваем JSON, чтобы найти массив, содержащий все книги в элементе items:
public void shouldMatchCountOfArrays() {
JSONArray jsonArray = JsonPath.read(json, "$.items.book[*]");
assertEquals(2, jsonArray.size());
}
6. Заключение
В этой статье мы рассмотрели несколько основных примеров того, как подсчитывать элементы в структуре JSON.
Вы можете изучить другие примеры путей в официальной документации JsonPath.
Как всегда, примеры кода можно найти в репозитории GitHub.