parsingJSON对象中的JSON数组

我有一些结构如下的JSON:

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

我已经将这个JSONstring命名为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"); } 

第二行显示以下例外情况:

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

请指导我在哪里犯错,以及如何纠正这一点。

mainJSON.getJSONArray("source")返回一个JSONArray ,因此你可以删除new JSONArray.

具有对象参数的JSONArray构造器期望它是一个Collection或Array(不是JSONArray)

尝试这个:

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

你的代码很好,只需要replace下面的代码:

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

用这一行:

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

第2行应该是

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

对于第3行,我不得不这样做

  JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString()); 
 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) 

获取数组内的对象。

这可以回答你的问题:

 JSONArray msg1 = (JSONArray) json.get("source"); for(int i = 0; i < msg1.length(); i++){ String name = msg1.getString("name"); int age = msg1.getInt("age"); }