我是json解析的新手,我从请求中抓取了一个json字符串,现在我需要用java解析它。我正在使用simple-lib。但我真的陷入困境,因为我不熟悉它。我需要提取以下数据
我使用了以下java代码,但它没有给我我需要的结果,请有人帮助我...
JSONParser parser = new JSONParser();
try {
Object obj = parser.parse(new FileReader("test.json"));
JSONObject jsonObject = (JSONObject) obj;
JSONArray msg = (JSONArray) jsonObject.get("content");
Iterator<String> iterator = msg.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
示例JSON
{
"status": 200,
"message": "ok",
"timestamp": "2014-05-22T14:29:56.824+03:00",
"pagesCount": 1,
"version": "1.1",
"pages": [
{
"number": 100,
"subpages": [
{
"number": 1,
"timestamp": "2014-05-22T13:41:41.116+03:00",
"content": "text"
},
答案 0 :(得分:1)
或许这样的事情?
JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) jsonObject.get("pages");
if (pages != null) {
for (Object p : pages) {
JSONObject page = (JSONObject) p;
JSONArray subPages = (JSONArray) page.get("subpages");
if (subPages != null) {
for (Object sp : subPages) {
JSONObject subPage = (JSONObject) sp;
System.err.println(subPage.get("content"));
}
}
}
}
答案 1 :(得分:0)
您正在请求与最外层对象中的键content
对应的值,但样本输入中不存在此类键。此外,名为content
的唯一字段具有字符串作为其值,而不是JSON数组。
要进入content
字段,您需要遍历对象层次结构,直到找到所需的元素,并使用以下内容:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(new FileReader("test.json"));
JSONArray pages = (JSONArray) json.get("pages");
// Page 10
JSONObject page = (JSONObject) pages.get(10);
// Subpages of page 10
JSONArray subpages = (JSONArray) page.get("subpages");
// Subpage 7 of page 10
JSONObject subpage = (JSONObject) subpages.get(10);
// Content of subpage 7 of page 10
String content = (String) subpage.get("content");
请注意我假设,例如索引10对应于第10页。在您的情况下可能不是这样;页面可能不是零索引,可能缺少页面或它们可能没有正确的顺序。在这种情况下,您将不得不遍历页面和子页面列表并测试number
字段的值以找到您需要的对象。
在任何情况下,如果您确实使用json-simple,似乎就是这种情况,那么JSONObject
是HashMap
的子类,JSONArray
是{的子类{3}}。因此,他们的界面应该非常熟悉。
免责声明:未经测试的代码 - 为简洁而删除了异常和其他错误处理
答案 2 :(得分:0)
首先,json无效(如果粘贴完成) 在JSON&#34; {}&#34;是一个对象,&#34; []&#34;是一个数组,其他只是键值对。 你可以不用解析器就这样做,
JSONObject objResponseJSON = new JSONObject(responseJSONString);
int status = (int) objResponseJSON.getInt("status");
//fetch other
JSONArray pages = objResponseJSON.getJSONArray("pages");
for(int count = 0; count < pages.length(); count++){
//fetch other
JSONObject objJSON = pages.getJSONObject(count);
JSONArray subpages = objJSON.getJSONArray("subpages");
for(int count1 = 0; count1 < subpages.length(); count1++){
JSONObject objSubpageJSON = subpages.getJSONObject(count1);
//fetch other
int number = (int) objSubpageJSON.getInt("number");
}
}