2014-05-22 60 views
0

我是json解析的新手,我从一个请求中抓取了一个json字符串,现在我需要用java解析它。我正在使用simple-lib。但是我很困难,因为我不熟悉它。我需要提取以下数据解析JSON对象到java中的字符串

我用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" 
       }, 
+1

什么是你正在使用的简单的lib?你尝试过一些更常见的东西,比如'gson'或'jackson'? –

+0

@MartinWickman:我认为所讨论的lib是[json-simple](https://code.google.com/p/json-simple/) –

+0

你希望找回的结果是什么?你是否收回任何东西或者是否收到错误? – Alicia

回答

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")); 
      } 
     } 
    } 
} 
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,因为好像是的话,那么JSONObjectHashMapJSONArrayArrayList子类的子类。因此,他们的界面应该对你来说很熟悉。

免责声明:未经测试的代码 - 为简洁

0

首先,将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"); 
    } 
}