2013-01-14 167 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讨论相同的线程。