2013-10-15 47 views
0

java對象如何創建使用Java對象和傑克遜這JSON內容遞歸? :如何創建從JSON

{ 
    "children": [ 
     { 
      "children": [ 
       { 
        "name": "cluster", 
        "children": [ 
         { 
          "name": "AgglomerativeCluster", 
          "size": 3938 
         }, 
         { 
          "name": "TestCLuster", 
          "size": 3938 
         } 
        ] 
       } 
      ], 
      "name": "analytics" 
     } 
    ], 
    "name": "flare" 
} 

這裏是我的對象結構,到目前爲止,一個名爲DendogramVO父母和命名一個子類兒童還設有一個兒童名單:

import java.util.List; 

public class DendogramVO { 
    private List<Children> children; 
    private String name; 

    public List<Children> getChildren() { 
     return this.children; 
    } 

    public void setChildren(List<Children> children) { 
     this.children = children; 
    } 

    public String getName() { 
     return this.name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

import java.util.List; 

public class Children { 

    private List<Children> children; 
    private String name; 

    public List<Children> getChildren() { 
     return children; 
    } 

    public void setChildren(List<Children> children) { 
     this.children = children; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

} 

回答

2

請注意,您的JSON包含未知屬性。您需要配置ObjectMapper不是當它遇到它們失敗(或者將它們添加到您的類)

String s="{ \"children\": [ { \"children\": [ { \"name\": \"cluster\", \"children\": [ { \"name\": \"AgglomerativeCluster\", \"size\": 3938 }, { \"name\": \"TestCLuster\", \"size\": 3938 } ] } ], \"name\": \"analytics\" } ], \"name\": \"flare\"}"; 
ObjectMapper mapper = new ObjectMapper(); 
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 
Children children = mapper.readValue(s, Children.class); 

System.out.println(children.getChildren()); 

用一個簡單的Children#toString()打印

[[children = [[children = [[children = null, name = AgglomerativeCluster], [children = null, name = TestCLuster]], name = cluster]], name = analytics]] 
+0

兒童#的toString()不匹配JSON我發佈的樹結構有問題? –

+1

@ user470184是的。最嵌套的json對象包含一個包含兩個json對象的json數組。它有名稱'集羣'。包含它的對象的名稱爲「analytics」。那個對象是「孩子」。如果你在上面的代碼中使用'children.getName()',它將打印'flare',這是根json對象的名字。 –

+0

你試過你的代碼,mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,假);導致編譯錯誤:「在類型ObjectMapper的方法配置(SerializationConfig.Feature,布爾值)是不適用的 參數(DeserializationFeature,布爾值)」 –