迭代JSON对象数组

3
我正在使用org.json.simple库来构建JSONArrayJSONObject。因此,我的结构看起来像这样:
c= [
  {
    "name":"test",
    "age":1
  },
  {
   "name":"test",
   "age":1
   }
]

为了在Java中遍历数组,我尝试使用
for (int i = 0; i < c.size(); i++) {
    JSONObject obj = (JSONObject) c.get(i);
    System.out.println(obj.get("name"));        
}

程序输出了null,但是当试图打印 obj.toString 时,如预期地输出了JSON字符串。

我正在使用 org.json.simple jar 包,因此无法使用定义在 org.json.JSONArrayorg.json.JSONObject 中的方法。

有没有想法如何根据键获取对象的值?


“i< c=arr.size()”是什么意思?变量“c”的类型是什么? - Tagir Valeev
https://dev59.com/xmMk5IYBdhLWcg3wxAvy - Atul O Holic
c = arr.size() 然后 c.get(i)?那不应该编译。所以请发布能够演示问题的确切代码。 - Alexis C.
@AlexisC,抱歉打错了,现在已经更新了代码。 - Santhosh
@TagirValeev,这是 c.size(),请看一下我的更新。 - Santhosh
1
@SanKrish 对我来说可以用:http://pastebin.com/bJbQ2avY 它会打印两次“test”。 - Alexis C.
3个回答

5

你的代码是绝对正确的,使用 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"));        
        }
    }
}

它的输出结果为:
test
test

请检查输入的JSONArray是如何创建的。有可能里面有不同的东西。例如,键名中可能有不可打印字符,因此在使用c.toString()时看不到它,但是obj.get("name")会失败。


2
您可以使用迭代器Iterator来遍历JSONArray元素,如下所示:
    //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"));
        }
    }

它使用 org.json.simple.JSONObjectorg.json.simple.JSONArray

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://dev59.com/xmMk5IYBdhLWcg3wxAvy#18977257

1
这种方法不起作用,正如问题中所提到的那样,我使用的是org.simple.json的JSONArray。它没有length()方法。 - Santhosh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接