«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.