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"); }