2013-02-22 106 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