在 JSON 对象中解析 JSON 数组
Posted
技术标签:
【中文标题】在 JSON 对象中解析 JSON 数组【英文标题】:Parsing JSON Array within JSON Object 【发布时间】:2011-08-04 17:51:20 【问题描述】:我有一些具有以下结构的 JSON:
"source":[
"name":"john","age":20,
"name":"michael","age":25,
"name":"sara", "age":23
]
我已将此 JSON 字符串命名为 mainJSON
。我正在尝试使用以下 Java 代码访问元素“名称”和“年龄”:
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.
请指导我在哪里犯了错误以及如何纠正这个错误。
【问题讨论】:
你的源代码没有问题,我已经试过了。 【参考方案1】:mainJSON.getJSONArray("source")
返回JSONArray
,因此您可以删除new JSONArray.
带有对象参数的 JSONArray 构造器期望它是一个集合或数组(不是 JSONArray)
试试这个:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
【讨论】:
我们怎样才能像这样解析 JSON? ["id":"1","name":"ABC","id":"2","name":"XYZ"] 这可能有助于 json = "\"m\"="+json+"";现在按名称“m”解析。【参考方案2】:您的代码很好,只需替换以下行:
JSONArray jsonMainArr = new JSONArray(mainJSON.getJSONArray("source"));
用这一行:
JSONArray jsonMainArr = mainJSON.getJSONArray("source");
【讨论】:
如果接收到的数据格式是[dict1,dict2,dict3]怎么办? JSONArray 列表 = 新 JSONArray(jsonString);【参考方案3】:第 2 行应该是
for (int i = 0; i < jsonMainArr.size(); i++) // **line 2**
对于第 3 行,我必须这样做
JSONObject childJSONObject = (JSONObject) new JSONParser().parse(jsonMainArr.get(i).toString());
【讨论】:
【参考方案4】: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 看起来像:[ “身份证”:1001, “名称”:“约翰” , “身份证”:1002, “名称”:“约翰” ] 您可以使用:
arr.getJSONObject(index)
获取数组内的对象。
【讨论】:
【参考方案5】:这可能是您问题的答案:
JSONArray msg1 = (JSONArray) json.get("source");
for(int i = 0; i < msg1.length(); i++)
String name = msg1.getString("name");
int age = msg1.getInt("age");
【讨论】:
能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述? 不起作用 - 迭代时不引用回“i” 无法将字符串转换为 JSONArray,这不起作用以上是关于在 JSON 对象中解析 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章