迭代JSON对象数组

时间:2015-06-25 08:45:54

标签: java arrays json

我正在使用org.json.simple库来构建JSONArray的{​​{1}}。所以我的结构看起来像

JSONObject

要在java中迭代数组,我试过

c= [
  {
    "name":"test",
    "age":1
  },
  {
   "name":"test",
   "age":1
   }
]

它打印for (int i = 0; i < c.size(); i++) { JSONObject obj = (JSONObject) c.get(i); System.out.println(obj.get("name")); } ,但在尝试打印null时,会按预期打印JSON字符串。

我使用的是obj.toString jar,因此无法使用org.json.simpleorg.json.JSONArray定义的方法。

有关从对象获取键值的任何想法吗?

3 个答案:

答案 0 :(得分:3)

Your code is absolutely correct, it works fine with org.json.simple:

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JsonTest {
    public static void main(String[] args) throws ParseException {
        JSONArray c = (JSONArray) new JSONParser()
                .parse("[ { \"name\":\"test\", \"age\":1 }, "
                        + "{ \"name\":\"test\", \"age\":1 } ]");
        for (int i = 0; i < c.size(); i++) {
            JSONObject obj = (JSONObject) c.get(i);
            System.out.println(obj.get("name"));        
        }
    }
}

It outputs:

test
test

Check how input JSONArray was created. It's possible that there's something different inside it. For example, it's possible that you have non-printable character in key name, so you don't see it when using c.toString(), but obj.get("name") fails.

答案 1 :(得分:2)

You can iterate over the JSONArray elements using an Iterator, like this:

    //arr is your JSONArray here
    Iterator<Object> iterator = arr.iterator();
    while (iterator.hasNext()) {
        Object obj = iterator.next();
        if(obj instanceof JSONObject) {
             System.out.println(obj.get("name"));
        }
    }

It uses org.json.simple.JSONObject and org.json.simple.JSONArray.

答案 2 :(得分:1)

使用以下代码片段来解析JsonArray。

for (int i = 0; i < jsonarray.length(); i++) {
    JSONObject jsonobject = jsonarray.getJSONObject(i);
    String name = jsonobject.getString("name");
    int age = jsonobject.getInt("age");
}

希望它有所帮助。

致谢 - https://stackoverflow.com/a/18977257/3036759