我必须序列化与此类似的对象:
public class Something {
String id;
Map<String, String> name;
Map<String, String> description;
}
字段name
和description
已国际化。键是区域设置标识符(“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”, ...生成的CSV必须如下所示:
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代码。是否有可以进行此类转换的库方法?
答案 0 :(得分:1)
从版本2.9.4开始,似乎不支持此功能,请参阅https://github.com/FasterXML/jackson-dataformats-text/tree/master/csv:
未来的改进: ... 使用虚线表示法映射嵌套POJO(类似于@JsonUnwrapped,但不需要使用