1

我必须序列化与此类似的对象:

public class Something {
    String id;

    Map<String, String> name;
    Map<String, String> description;
}

领域namedescription国际化。键是区域设置标识符(“fr”、“en-US”、“en-UK”、“de”、...),值是该区域设置的相应值。

预期 CSV 的标题行必须如下所示:

id,name.fr,name.en-US,description.fr,description.en-US

如果为简洁起见省略了其他语言。

@JsonUnwrapped似乎没有帮助,因为它会为所有属性生成相同的键“fr”,“en-US”,...。

杰克逊开箱即用有什么方法可以实现这一目标?硬编码支持的语言环境标识符列表是可以接受的。

前面还有更多的恶作剧。另一个要序列化的类如下所示:

public class SomethingElse {
    String id;

    Map <String, Feature> features;
}

public class Feature {
    Map <String, String> feature;
}

每个SomethingElse都有“颜色”、“味道”、...在每种语言“fr”、“en-US”、“en-UK”、“de”...中的特征值像这样:

id,color.fr,color.en-US,taste.fr,taste.en-US,...

区域设置标识符列表在所有用例中都是相同的。

一种可能的方法是先序列化为 JSON,然后“扁平化”该 JSON,以便可以轻松地将其序列化为 CSV。“扁平化”是指转换:

{
  "foo": {
    "bar": {
      "a": 1,
      "b": 2
    }
  }
}

进入:

{
  "foo.bar.a": 1,
  "foo.bar.b": 2
}

换句话说:每个叶子值的键将成为原始数据结构中访问它所需的 JavaScript 代码。有没有可以进行这种转换的库方法?

4

1 回答 1

1

从 2.9.4 版开始似乎不支持此功能,请参阅https://github.com/FasterXML/jackson-dataformats-text/tree/master/csv

未来改进: ... 使用点表示法映射嵌套 POJO(类似于 @JsonUnwrapped,但不需要使用它

于 2018-02-14T12:56:49.043 回答