【发布时间】:2020-06-26 19:44:40
【问题描述】:
我有以下 json,需要一些帮助来阅读 json 和键值对。使用 Java 我怎样才能读出来?
我正在尝试使用“org.json.simple.parser.JSONParser”,但无法读出键和值。
这是我阅读这些项目的尝试:
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(ds.getDoceboCourseData());
JSONObject jsonObject = (JSONObject) obj;
JSONArray items = (JSONArray) jsonObject.get("items");
Iterator<JSONObject> iterator = items.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (Exception e) {
e.printStackTrace();
}
JSON:
{
"data":{
"items":[
{
"user_id":"111",
"username":"111",
"email":"blah@blah.com",
"first_name":"blah",
"last_name":"blah",
"level":"Learner",
"enrollment_date":"2020-06-26 00:43:49",
"active_from":null,
"active_until":null,
"status":"Completed",
"status_id":"2",
"level_id":"3",
"user_status_id":"1",
"user_status":"Active",
"score_given":"0.00",
"forced_score_given":false,
"date_complete":"2020-06-26 01:04:01"
}
],
"count":10,
"has_more_data":true,
"current_page":1,
"current_page_size":10,
"total_page_count":3,
"total_count":23
},
"version":"1.0.0",
"_links":[
]
}
【问题讨论】:
-
你有一个外部对象。所以第一个键是'data':'data'->'items'。为什么不使用更高级的 JSON(反)序列化库,例如 Jackson 或 GSON?
-
请澄清“无法读出键和值”。您是否没有看到 任何 结果,或者您看到了异常堆栈跟踪或编译错误等意外情况?
-
抱歉...出现空值错误:JSONArray items = (JSONArray) jsonObject.get("items");
-
在 JSON 中,
{}代表一个对象,[]代表一个数组。当您解析{foo: {bar: "abc"} }之类的内容时,您将获得带有键foo的对象。foo键有自己的对象,键为bar,值为"abc"。因此,当您想投注"abc"时,首先获取foo键下的值,然后从返回的对象读取bar键的值。目前你正在做的是要求bar,但大多数外部对象没有那个键,所以它返回null。 -
您还可以考虑将您的 JSON 视为目录树。使用帽子类比,您的代码就像尝试读取
/items而不是/data/items。换句话说,首先是get("data"),然后是结果get("items")
标签: java arrays json jsonparser