封送包含JSON对象映射的对象列表

时间:2013-01-14 14:51:18

标签: java json jackson

我有这个对象结构,我试图用Jackson注释来编组/解组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的地图,其中地图的关键字是name属性C。如果可能,我希望JSON看起来像这样:

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

KEY_IN_MAP的名称CB地图中的关键字,VALUE_IN_C是地图中值对象的值。我已经尝试为地图注释put方法:

@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"
                   }
               }
               ]
}

有没有办法与Jackson或任何其他JSON序列化库进行上述映射?我的目标是摆脱每次写"value"的冗余并尽可能压缩文件。

B中的地图可以转换为C的列表,但我仍然需要映射

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

1 个答案:

答案 0 :(得分:1)

以下是我的一些建议:

  1. 让您的Map<String,C>成为Map<String,String>
  2. 您还可以将Map<String,C>设为List<C>
  3. 请查看讨论相同内容的other帖子。