次の構造を持つ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.
私がどこで間違いを犯しているのか、どのように修正するのかを教えてください。
mainJSON.getJSONArray("source")
はJSONArray
を返します。したがって、new JSONArray.
を削除できます
オブジェクトパラメーターを持つJSONArrayコンストラクターは、JSONArrayではなく、コレクションまたは配列であると想定しています
これを試して:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
コードは問題ありません。次の行を置き換えるだけです。
JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
この行で:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
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)
配列内のオブジェクトを取得します。
行2は
for (int i = 0; i < jsonMainArr.size(); i++) { // **line 2**
3行目では、
JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());