迭代 JSON 对象数组

San*_*ish 3 java arrays json

我使用的org.json.simple库来构建JSONArrayJSONObject。所以我的结构看起来像

c= [
  {
    "name":"test",
    "age":1
  },
  {
   "name":"test",
   "age":1
   }
]
Run Code Online (Sandbox Code Playgroud)

为了在java中迭代数组,我试过

for (int i = 0; i < c.size(); i++) {
    JSONObject obj = (JSONObject) c.get(i);
    System.out.println(obj.get("name"));        
}
Run Code Online (Sandbox Code Playgroud)

它打印了null,但是当尝试打印 时obj.toString,它会按预期打印 JSON 字符串。

我正在使用org.json.simplejar,所以不能使用定义的方法org.json.JSONArrayorg.json.JSONObject.

有什么想法可以用它们的键从对象中获取值吗?

Tag*_*eev 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"));        
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出:

test
test
Run Code Online (Sandbox Code Playgroud)

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