1. ホーム
  2. java

JSON - JSONArray を繰り返し処理する

2023-11-08 05:42:03

質問

いくつかの配列を含むJSONファイルを持っています。私はファイルの配列を繰り返し、それらの要素とその値を取得したいと思います。

私のファイルはこのような感じです。

{
"JObjects": {
    "JArray1": [
        {
            "A": "a",
            "B": "b",
            "C": "c"
        },
        {
            "A": "a1",
            "B": "b2",
            "C": "c3",
            "D": "d4"
            "E": "e5"
        },
        {
            "A": "aa",
            "B": "bb",
            "C": "cc",
            "D": "dd"
        }

    ]
}

}       

ここまで来たか。

JSONObject object = new JSONObject("json-file.json");
JSONObject getObject = object.getJSONObject("JObjects");
JSONArray getArray = getObject.getJSONArray("JArray1");

for(int i = 0; i < getArray.length(); i++)
{
      JSONObject objects = getArray.getJSONArray(i);
      //Iterate through the elements of the array i.
      //Get thier value.
      //Get the value for the first element and the value for the last element.
}

このようなことは可能でしょうか?

このようにしたい理由は、ファイル内の配列の要素数が違うからです。

どのように解決するのですか?

変更

JSONObject objects = getArray.getJSONArray(i);

から

JSONObject objects = getArray.getJSONObject(i);

または

JSONObject objects = getArray.optJSONObject(i);

は、どのJSON-to/from-Javaライブラリを使用しているかに依存します。 (それは次のように見えます getJSONObject が動作するようです)。

次に、"objects"の中の文字列要素にアクセスするため。 JSONObject にある文字列要素にアクセスするには、要素名でそれらを取り出します。

String a = objects.get("A");

の要素名が必要な場合は、その都度 JSONObject にある要素の名前が必要な場合は、静的ユーティリティ・メソッド JSONObject.getNames(JSONObject) を使うことができます。

String[] elementNames = JSONObject.getNames(objects);

"最初の要素の値と、最後の要素の値を取得します."

もし"element"が配列の構成要素を参照している場合、最初の構成要素はインデックス0、最後の構成要素はインデックス getArray.length() - 1 .


配列内のオブジェクトを繰り返し処理し、コンポーネントと値を取得したいです。この例では、最初のオブジェクトには 3 つのコンポーネントがあり、2 番目には 5 つのコンポーネント、3 番目には 4 つのコンポーネントがあります。それぞれのオブジェクトを繰り返し処理し、コンポーネント名と値を取得したい。

次のコードはまさにそれを行います。

import org.json.JSONArray;
import org.json.JSONObject;

public class Foo
{
  public static void main(String[] args) throws Exception
  {
    String jsonInput = "{\"JObjects\":{\"JArray1\":[{\"A\":\"a\",\"B\":\"b\",\"C\":\"c\"},{\"A\":\"a1\",\"B\":\"b2\",\"C\":\"c3\",\"D\":\"d4\",\"E\":\"e5\"},{\"A\":\"aa\",\"B\":\"bb\",\"C\":\"cc\",\"D\":\"dd\"}]}}";

    // "I want to iterate though the objects in the array..."
    JSONObject outerObject = new JSONObject(jsonInput);
    JSONObject innerObject = outerObject.getJSONObject("JObjects");
    JSONArray jsonArray = innerObject.getJSONArray("JArray1");
    for (int i = 0, size = jsonArray.length(); i < size; i++)
    {
      JSONObject objectInArray = jsonArray.getJSONObject(i);

      // "...and get thier component and thier value."
      String[] elementNames = JSONObject.getNames(objectInArray);
      System.out.printf("%d ELEMENTS IN CURRENT OBJECT:\n", elementNames.length);
      for (String elementName : elementNames)
      {
        String value = objectInArray.getString(elementName);
        System.out.printf("name=%s, value=%s\n", elementName, value);
      }
      System.out.println();
    }
  }
}
/*
OUTPUT:
3 ELEMENTS IN CURRENT OBJECT:
name=A, value=a
name=B, value=b
name=C, value=c

5 ELEMENTS IN CURRENT OBJECT:
name=D, value=d4
name=E, value=e5
name=A, value=a1
name=B, value=b2
name=C, value=c3

4 ELEMENTS IN CURRENT OBJECT:
name=D, value=dd
name=A, value=aa
name=B, value=bb
name=C, value=cc
*/