JSONArrayのキーで値を取得する

JSONArrayのキーで値を取得

1. 概要

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

JSONObjectJSONArrayは、ほとんどのJSON処理ライブラリで通常使用できる2つの一般的なクラスです。 A JSONObject stores unordered key-value pairs、JavaMapの実装によく似ています。 A JSONArray, on the other hand, is an ordered sequence of valuesは、JavaのListまたはVectorによく似ています。

このチュートリアルでは、JSON-Javaorg.json)ライブラリを使用し、JSONArrayを処理して特定のキーの値を抽出する方法を学習します。 必要に応じて、このライブラリで利用可能なan introductionを用意しています。

2. メーベン依存

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


    org.json
    json
    20180813

Maven CentralJSON-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オブジェクトは、属性またはキーとしてa name, age,cityを持つ顧客レコードを表します。

4. JSONArrayの処理

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

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

public List 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()は、そのようなキーが存在しない場合、空の文字列を返します。

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

[John, Gary, Selena]

5. 結論

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

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

いつものように、完全なソースコードは利用可能ですover on Github.