我必须序列化与此类似的对象:
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”...中的特征值像这样:
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 代码。有没有可以进行这种转换的库方法?