web-dev-qa-db-ja.com

JSONオブジェクト内のJSON配列の解析

次の構造を持つJSONがいくつかあります。

{"source":[
           {"name":"john","age":20},
           {"name":"michael","age":25},
           {"name":"sara", "age":23}
         ]
}

このJSON文字列にはmainJSONという名前を付けました。次のJavaコードを使用して、要素 "name"および "age"にアクセスしようとしています。

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
for (int i = 0; i < jsonMainArr.length(); i++) {  // **line 2**
     JSONObject childJSONObject = jsonMainArr.getJSONObject(i);
     String name = childJSONObject.getString("name");
     int age     = childJSONObject.getInt("age");
}

行番号2に対して次の例外が表示されています。

org.json.JSONException: JSONArray initial value should be a string or collection or array.

私がどこで間違いを犯しているのか、どのように修正するのかを教えてください。

45

mainJSON.getJSONArray("source")JSONArrayを返します。したがって、new JSONArray.を削除できます

オブジェクトパラメーターを持つJSONArrayコンストラクターは、JSONArrayではなく、コレクションまたは配列であると想定しています

これを試して:

JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 
50
Chandu

コードは問題ありません。次の行を置き換えるだけです。

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));

この行で:

JSONArray jsonMainArr = mainJSON.getJSONArray("source");
9
Imran Muhammad
private static String readAll(Reader rd) throws IOException {
    StringBuilder sb = new StringBuilder();
    int cp;
    while ((cp = rd.read()) != -1) {
      sb.append((char) cp);
    }
    return sb.toString();
  }

 String jsonText = readAll(inputofyourjsonstream);
 JSONObject json = new JSONObject(jsonText);
 JSONArray arr = json.getJSONArray("sources");

Arrは次のようになります:[{"id":1001、 "name": "jhon"}、{"id":1002、 "name": "jhon"}]次を使用できます。

arr.getJSONObject(index)

配列内のオブジェクトを取得します。

0
Kun

行2は

for (int i = 0; i < jsonMainArr.size(); i++) {  // **line 2**

3行目では、

    JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());
0
Vinay Vemula