2017-04-05 37 views
1

我有一個示例pojo有一個MapJava地圖到JSON {「key」:「value」,「key1」:「value1」}作爲「key」:值,「key1」:「value1」使用Jackson

class Sample { 
    private Integer id; 
    private String name; 
    private Map<String,Object> map; 
    public Map<String,Object> getMap() { 
    return map; 
    } 
    public void setMap(Map<String, Object> map) { 
    this.map = map; 
    } 
    public Integer getId() { 
    return id; 
    } 
    public void setId(Integer id) { 
    this.id = id; 
    } 
    public String getName() { 
    return name; 
    } 
    public void setName(String name) { 
    this.name = name; 
    } 
} 

當我使用Jackson將此POJO編寫爲JSON時,我得到以下結果。

{ 
    "id" : 1234, 
    "name" : "abc", 
    "map" : { 
    "key1" : { 
     "field" : "value", 
     "field1" : "value" 
    }, 
    "key2" : [ 
     { 
      "something" : "a", 
      "somethingElse" : 1 
     }, 
     { 
      "something" : "b", 
      "somethingElse" : 2 
     } 
    ] 
    } 
} 

,而我想有這個地圖寫成

{ 
    "id" : 1234, 
    "name" : "abc", 
    "key1" : { 
     "field" : "value", 
     "field1" : "value" 
    }, 
    "key2" : [ 
    { 
     "something" : "a", 
     "somethingElse" : 1 
    }, 
    { 
     "something" : "b", 
     "somethingElse" : 2 
    } 
    ] 
} 

有沒有辦法這一點沒有使用自定義序列?

+2

爲什麼你有Map的包裝類。你不能直接序列化地圖來獲取你之後的JSON嗎? –

+1

所以你只是想擺脫外面的''地圖「:{...}'?在這種情況下,只需序列化地圖本身,而不是封裝。如果該包裝恰好也包含其他字段,則最好不要刪除該「地圖」級別。 – Thomas

+0

@Thomas是的我想擺脫「地圖」:{...}。我正在探索除自定義序列化程序之外的其他選項,例如Jackon的mixin或propertyNamingStrategy –

回答

2

如果你可以使用傑克遜,比下面的代碼可以幫助你:

class Sample { 

    private Map<String,Object> map = new HashMap<>(); 
    @JsonAnyGetter 
    public Map<String,Object> getMap() { 
    return this.map; 
    } 
    public void setMap(Map<String, Object> map) { 
    this.map = map; 
    } 
    @JsonAnySetter 
    public void addValue(String key, Object value) { 
    this.map.put(key, value); 
    } 
} 

在這種情況下,所有不明領域,這將存儲(或獲得)值由他們的鍵。

+0

完美,此解決方案適用於我 –

相關問題