我有一些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.
请指导我在哪里犯错误以及如何纠正这个问题。
答案 0 :(得分:50)
mainJSON.getJSONArray("source")
会返回JSONArray
,因此您可以删除new JSONArray.
带有object参数的JSONArray构造函数需要它是Collection或Array(而不是JSONArray)
试试这个:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
答案 1 :(得分:9)
您的代码很好,只需替换以下行:
JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
这一行:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
答案 2 :(得分:0)
第2行应
for (int i = 0; i < jsonMainArr.size(); i++) { // **line 2**
对于第3行,我不得不做
JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());
答案 3 :(得分:0)
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会是这样的:[ { &#34; ID&#34;:1001, &#34;名称&#34;:&#34; JHON&#34; }, { &#34; ID&#34;:1002, &#34;名称&#34;:&#34; JHON&#34; } ] 您可以使用:
arr.getJSONObject(index)
获取数组内的对象。
答案 4 :(得分:-3)
这可能是您问题的答案:
JSONArray msg1 = (JSONArray) json.get("source");
for(int i = 0; i < msg1.length(); i++){
String name = msg1.getString("name");
int age = msg1.getInt("age");
}