[英]Parse JSON object to string in java
我是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"
},
大概是这样吗?
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"));
}
}
}
}
您正在从最外面的对象请求与键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
是ArrayList
的子类。 因此,您对它们的界面应该非常熟悉。
免责声明:未经测试的代码-为简洁起见,删除了异常和其他错误处理
首先,json无效(如果粘贴完整),在JSON中,“ {}”是一个对象,“ []”是一个数组,其他只是键值对。 简而言之,您无需使用解析器就可以这样做,
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");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.