1. 概要

JSONは、ほとんどのクライアント/サーバー通信で使用される、軽量で言語に依存しないデータ交換形式です。

JSONObjectJSONArrayは、ほとんどのJSON処理ライブラリで通常使用できる2つの一般的なクラスです。 JSONObjectは、Java Map の実装と同様に、順序付けされていないキーと値のペアを格納します。 一方、 JSONArrayは、JavaのListまたはVectorによく似た、値の順序付けられたシーケンスです。

このチュートリアルでは、 JSON- Java org.json )ライブラリを使用し、JSONArrayを処理して与えられたキー。 必要に応じて、このライブラリの紹介を利用できます。

2. Mavenの依存関係

まず、POMに以下の依存関係を追加することから始めます。

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180813</version>
</dependency>

MavenCentralJSON-Javaの最新バージョンをいつでも見つけることができます。

3. コンテキストの構築

JSONメッセージは通常、相互にネストされている可能性のあるJSONオブジェクトと配列で構成されます。 JSONArrayオブジェクトは角括弧[]で囲まれ、JSONObjectは中括弧{}で囲まれます。 たとえば、次のJSONメッセージについて考えてみましょう。

[
    {
        "name": "John",
        "city": "chicago",
        "age": "22"
    },
    {
        "name": "Gary",
        "city": "florida",
        "age": "35"
    },
    {
        "name": "Selena",
        "city": "vegas",
        "age": "18"
    }
]

明らかに、それはJSONオブジェクトの配列です。 この配列の各JSONオブジェクトは、属性またはキーとして名前、年齢、および都市を持つ顧客レコードを表します。

4. JSONArrayを処理しています

上記のJSONを前提として、すべての顧客の名前を知りたい場合はどうなりますか? つまり、この例ではキー“ name” が与えられた場合、特定のJSON配列でそのキーにマップされたすべての値を見つけるにはどうすればよいでしょうか。

ご存知のとおり、JSONArrayはJSONオブジェクトのリストです。 それでは、特定のキーのすべての値を見つけましょう。

public List<String> getValuesForGivenKey(String jsonArrayStr, String key) {
    JSONArray jsonArray = new JSONArray(jsonArrayStr);
    return IntStream.range(0, jsonArray.length())
      .mapToObj(index -> ((JSONObject)jsonArray.get(index)).optString(key))
      .collect(Collectors.toList());
}

前の例では:

  • まず、JSON配列内のオブジェクトのリスト全体を繰り返し処理します
  • 次に、 JSONObject ごとに、指定されたキーにマップされた値を取得します

また、メソッド optString()は、そのようなキーが存在しない場合、空の文字列を返します。

getValuesForGivenKey(jsonArrayStr、“ name”)を呼び出すと、 jsonArrayStr はJSONの例であり、すべての名前のListを出力として取得します。

[John, Gary, Selena]

5. 結論

この簡単な記事では、 JSONArray を解析して、特定のキーにマップされたすべての値を取得する方法を学びました。 ここでは、 JSON-Java(org.json)ライブラリを使用しました。

JSON.simple は、JavaでJSONを操作するためのもう1つの同様の強力な代替手段です。 お気軽にご探索ください。

いつものように、完全なソースコードはGithubで入手できます