2013-01-14 164 views
0

我有這個對象結構,我試圖用傑克遜註釋到元帥/解組到JSON文件。包含對象映射到JSON的對象的列表清單

public class A { 
    List<B> bList; 
} 

public class B { 
    String attr; 
    Map<String, C> map; 
} 

public class C { 
    @JsonIgnore 
    String name; 
    String value; 
} 

A具有B列表的和B具有地圖的C一個的情況下,映射的關鍵是Cname屬性。我想如果可能的JSON看起來像這樣:

{ 
    "bList" : [ 
       { 
        "attr":"itsValue" 
        "KEY_IN_MAP":"VALUE_IN_C", 
        "KEY_2_IN_MAP":"VALUE_2_IN_C" 
       } 
       ] 
} 

KEY_IN_MAPCB的地圖鍵和VALUE_IN_C名稱是在地圖中的值對象的值。我試過註釋看跌方法地圖:

@JsonAnySetter 
private void put(String name, C value) { 
    map.put(name, c); 
} 

但是編組這給了我:

{ 
    "bList" : [ 
       { 
        "attr":"itsValue" 
        "KEY_IN_MAP": { 
         "value":"VALUE_IN_C", 
        }, 
        "KEY_2_IN_MAP": { 
         "value":"VALUE_2_IN_C" 
        } 
       } 
       ] 
} 

有沒有什麼辦法讓傑克遜或任何其他JSON序列化圖書館的上述映射?我的目標是擺脫每次編寫"value"的冗餘並儘可能壓縮文件。

B地圖可以變成的C清單,但我仍然需要映射是

{"name" : "value"} for each object C 
+0

爲什麼不讓'Map 地圖代替'Map map'? – Srinivas

+0

如何讓你的'地圖地圖'列表'而不是? – Srinivas

+0

這有效,但我有點想保持對象結構。對於Json來說可能沒有意義,但對於我的應用程序來說這很重要。 –

回答

1

這裏是我有幾個建議:

  1. 讓您Map<String,C>是一個Map<String,String>
  2. 你也可以讓你的Map<String,C>List<C>

請看看other討論相同的線程。