2016-05-30 72 views
2

考慮我有這樣json片段(更復雜的JSON的一部分):解析序列

"foo": { 
    "abc": { 
     "prop1": "blabla11"; 
     "prop2": "blabla12"; 
     "prop3": "blabla13"; 
    }, 
    "bcd": { 
     "prop1": "blabla21"; 
     "prop2": "blabla22"; 
     "prop3": "blabla23"; 
    }, 
    ... 
} 

即全部abc,bcd等項目具有相同的內部結構。

是否有任何優雅的方式來註釋以下java結構,以便通過jackson解析它到Foo類的對象?

注意:foo不是根結構,所以我不能單獨解析它。

public class Foo {  
    private Map<String, FooItem> items; 
    ...   
} 

public class FooItem { 
    private String prop1; 
    private String prop2; 
    private String prop3; 
    ... 
} 

回答

-1

定義一個更大的結構,您可以使用它讀取更復雜的JSON。使用@JsonIgnoreProperties忽略任何未知的位。

試試這個:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class LargerStructure { 

    private Foo foo; 

    public Foo getFoo() { 
     return foo; 
    } 

    public void setFoo(Foo foo) { 
     this.foo = foo; 
    } 
} 


public class App { 

    public static void main(String ...args){ 

     File input = new File("largerInput.json"); 
     LargerStructure largerStructure = deserialise(input); 
     System.out.println(largerStructure.getFoo()); 
    } 


    public static LargerStructure deserialise(File input){ 

     LargerStructure largerStructure = null; 

     try { 

      ObjectMapper mapper = new ObjectMapper(); 
      largerStructure = mapper.readValue(input, LargerStructure.class); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return largerStructure; 
    } 
} 
+0

這將如何幫助我分析'Foo'的結構'地圖<字符串,FooItem>'? – Andremoniy

+0

你的問題是如何解析片段到Foo對象,其中foo元素不是根。答案中的代碼將做到這一點。如果仍有問題,請確保您已爲Foo和FooItem類的成員變量提供了正確的訪問器方法。 – maccaroo

+0

它會填寫地圖'Map '?你試過了嗎? – Andremoniy