Посчитай с помощью JsonPath

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[хранилище].