2013-02-22 47 views
0

我已经在几分钟内解析了一个JSON,这很简单。与杰克逊解析JSON让我疯狂

我需要在JAVA中做同样的事情,它更复杂。 我选择了杰克逊。

这里的JSON:

{ 
"object":"page", 
"entry":[ 
    { 
     "id":"1849584656581184912", 
     "time":1361458605, 
     "changes":[ 
      { 
       "field":"feed", 
       "value":{ 
        "item":"post", 
        "verb":"add", 
        "post_id":"6022322264458251" 
       } 
      } 
     ] 
    }, 
    { 
     "id":"184965658184912", 
     "time":1361458606, 
     "changes":[ 
      { 
       "field":"feed", 
       "value":{ 
        "item":"comment", 
        "verb":"add", 
        "comment_id":"1849584656581184912_6022322264458251_7510038", 
        "parent_id":"1849584656581184912_6022322264458251", 
        "sender_id":657754651107, 
        "created_time":1361458606 
       } 
      }, 
      { 
       "field":"feed", 
       "value":{ 
        "item":"comment", 
        "verb":"add", 
        "comment_id":"1849584656581184912_6022322264458251_7510037", 
        "parent_id":"1849584656581184912_6022322264458251", 
        "sender_id":657754651107, 
        "created_time":1361458606 
       } 
      } 
     ] 
    } 
] 
} 

下面的PHP代码:

foreach($object["entry"] as $update) 
{ 
    // For each entry in notification, display the entry 
    echo "page id = " . $update["id"]; 
    echo "time = " . $update["time"]; 

    foreach($update["changes"] as $change) { 
     echo "field = " . $change["field"]; 
     echo "verb = " . $change["value"]["verb"]; 

     if($change["value"]["item"] == "comment") { 
      echo "Nouveau commentaire publié !"; 
      echo "comment_id = " . $change["value"]["comment_id"]; 
      echo "parent_id = " . $change["value"]["parent_id"]; 
      echo "sender_id = " . $change["value"]["sender_id"]; 
      echo "created_time = " . $change["value"]["created_time"]; 
     } else if($change["value"]["item"] == "post") { 
      echo "Nouveau post publié !"; 
      echo "post_id = " . $change["value"]["post_id"]; 
     } 
    } 
} 

所以我需要同样的事情,解析这个JSON和显示一些信息。

你知道一个简单的方法来做到这一点,就像在PHP中一样吗?

感谢

+0

你能张贴你映射到Java POJO? – 2013-02-22 09:23:57

+0

请注意,你可以像你想要的那样进行提取(一个答案显示它),但是使用数据绑定可能会更方便:将_same structure_定义为JSON,并且只是要求JSON将数据绑定到它。这比国际海事组织比上面的代码更方便,您可以在这里编写大量的样板代码,而不是单行数据绑定。 – StaxMan 2013-02-24 01:57:21

回答

2

如果你只是想访问某些字段直接,那么你应该使用JsonNodes

ObjectMapper mapper = new ObjectMapper(); 
JsonNode root = mapper.readTree(jsonString); 
JsonNode entry = root.get("entry"); 
… 

编辑:一定要看看所有具体的子类。例如,ArrayNode可以让您遍历所有元素。

相同的代码,上面蒙上:

ObjectMapper mapper = new ObjectMapper(); 
ObjectNode root = (ObjectNode) Jsmapper.readTree(jsonString); 
ArrayNode entry = (ArrayNode) root.get("entry"); 
… 
+0

好的开始,谢谢! 如果我想显示所有我的入口节点中的所有信息? – superscral 2013-02-22 09:50:40

+0

您可以使用* fields()*方法遍历ObjectNodes的所有字段,或者使用方法* elements()*(如我的编辑中所述)遍历ArrayNodes的所有元素。所以代码基本上和你的PHP例子一样。你能否具体化你的问题? – nutlike 2013-02-22 10:01:11