在JSON对象中解析JSON数组

Ami*_*rty 45 java parsing json

我有一些JSON具有以下结构:

{"source":[
           {"name":"john","age":20},
           {"name":"michael","age":25},
           {"name":"sara", "age":23}
         ]
}
Run Code Online (Sandbox Code Playgroud)

我将此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");
}
Run Code Online (Sandbox Code Playgroud)

我在第2行显示以下异常:

org.json.JSONException: JSONArray initial value should be a string or collection or array.
Run Code Online (Sandbox Code Playgroud)

请指导我哪里弄错了以及如何纠正这个问题.

Cha*_*ndu 50

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

带有object参数的JSONArray构造函数需要它是一个Collection或Array(而不是JSONArray)

试试这个:

JSONArray jsonMainArr = mainJSON.getJSONArray("source"); 
Run Code Online (Sandbox Code Playgroud)

  • 我们如何解析这样的JSON?[{ "ID": "1", "名称": "ABC"},{ "ID": "2", "名称": "XYZ"}] (3认同)

小智 9

您的代码很好,只需替换以下行:

JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
Run Code Online (Sandbox Code Playgroud)

用这一行:

JSONArray jsonMainArr = mainJSON.getJSONArray("source");
Run Code Online (Sandbox Code Playgroud)