1. 概要

このクイックチュートリアルでは、JsonPathを使用してJSONドキュメント内のオブジェクトと配列をカウントする方法を説明します。

JsonPathは、JSONドキュメントの特定の部分をトラバースするための標準メカニズムを提供します。 JsonPathはJSONに対して、XPathはXMLに対してであると言えます。

2. 必要な依存関係

次のJsonPath Maven依存関係を使用しています。これは、もちろん、 MavenCentralで利用できます。

<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テストでは、カウントするJSON StringとJSONパス「$」を使用してJsonPath.read()を呼び出します。

public void shouldMatchCountOfObjects() {
    Map<String, String> objectMap = JsonPath.read(json, "$");
    assertEquals(3, objectMap.keySet().size());
}

結果のMap、のサイズを数えることで、JSON構造内の特定のパスにある要素の数がわかります。

5. JSON配列サイズをカウントする

次のJUnitテストでは、JSONをクエリして、items要素の下にあるすべてのbooksを含む配列を見つけます。

public void shouldMatchCountOfArrays() {
    JSONArray jsonArray = JsonPath.read(json, "$.items.book[*]");
    assertEquals(2, jsonArray.size());
}

6. 結論

この記事では、JSON構造内のアイテムをカウントする方法に関するいくつかの基本的な例について説明しました。

公式JsonPathドキュメントで他のパスの例を調べることができます。

いつものように、コード例は GitHubリポジトリにあります。