2016-04-18 42 views
0

我需要將JSON字符串轉換爲Java對象。 JSON將有幾個已知的字段和一些未知的字段。這裏有一個例子:JSONSON與JSON:映射無法識別的字段

public class MyJsonBean { 
    private String abc; 
    private String def; 

    // getters and setters 
} 

而且JSON我想分析:

{"abc":"value1","def":"value2","ghi":"value3","jkl":"value4"} 

只有固定域是 「ABC」 和 「DEF」。其他領域是可變的。 我想讓傑克遜解析變量字段並將它們放入MyJsonBean類中的列表/映射中。有沒有辦法做到這一點?

+0

使用'@ JsonAnySetter'在鏈接的重複,你可以在''Map'或'add'到'List'適當put'這些值。 – Savior

回答

1

使用@JsonAnySetter被json反序列化調用來存儲json對象的非成員元素。將值存儲在otherAnnotations字段中。

傑克遜實際上可以做出這樣的POJO的工作:這裏是做這件事:

public class MyJsonBean 
{ 
    // Two mandatory properties 
    protected final String abc; 
    protected final String def; 

    // and then "other" stuff: 
    protected Map<String,Object> other = new HashMap<String,Object>(); 

    // Could alternatively add setters, but since these are mandatory 
    @JsonCreator 
    public MyJsonBean (@JsonProperty("abc") String abc, @JsonProperty("def") String def) 
    { 
     this.abc = abc; 
     this.def = def; 
    } 

    public int getId() { return id; } 
    public String getName() { return name; } 

    public Object get(String name) { 
     return other.get(name); 
    } 

    // "any getter" needed for serialization  
    @JsonAnyGetter 
    public Map<String,Object> any() { 
     return other; 
    } 

    @JsonAnySetter 
    public void set(String name, Object value) { 
     other.put(name, value); 
    } 
} 

而且我們有它:序列化和反序列化很好。

分享和享受... :)

+0

正是我尋找的答案!謝謝@Abdel :) –

相關問題