2016-04-18 8 views
0

JSON文字列をJavaオブジェクトに変換する必要があります。 JSONにはいくつかの既知のフィールドと未知のフィールドがあります。次に例を示します。JACKSON with JSON:マップが認識されないフィールド

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

    // getters and setters 
} 

とJSON私が解析したい:

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

のみの固定フィールドは、 "ABC" と "DEF" です。他のフィールドは可変です。 私はJacksonが変数フィールドを解析し、それらをMyJsonBeanクラス内のリスト/マップに入れたいと思います。それを行う方法はありますか?

+0

'JsonAnySetter' @リンク重複して、あなたがMap'や' 'List'にadd'適切な'にそれらの値を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

まさに私が探していた答え!ありがとう@アブデル:) –

関連する問題