在Java中将JSON对象解析为字符串

时间:2014-05-22 12:22:52

标签: java json parsing object

我是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"
                },

3 个答案:

答案 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,似乎就是这种情况,那么JSONObjectHashMap的子类,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");
    }
}