【发布时间】:2021-10-10 16:50:41
【问题描述】:
我正在尝试编写一个通用的 JSON 到 XML 转换器,但不知道如何将一些 JSON 属性转换为 XML 属性。
假设我有以下 JSON:
{
"data" : {
"key1" : "value1",
"key2" : {
"value": "value2",
"attribute#someattribute": "value3"
}
}
}
那么我想得到这个:
<xml>
<data>
<key1>value1</key1>
<key2 someattribute=value3>value2</key2>
</data>
</xml>
我可以将约定更改为其他内容,但应该能够实现类似的效果。
到目前为止,我正在将 JSON 转换为 Map
xmlMapper = new XmlMapper();
xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_1_1, true);
final SimpleModule sm = new SimpleModule();
sm.addKeySerializer(String.class, new JsonSerializer<String>() {
@Override
public void serialize(final String value, final JsonGenerator gen, final SerializerProvider serializers) throws IOException {
gen.writeFieldName(StringEscapeUtils.escapeXml11(value.trim()));
}
});
xmlMapper.registerModule(sm);
final OutputStream os = new ByteArrayOutputStream();
xmlMapper.writer().withRootName(rootElement).writeValue(os, map.get(rootElement));
我可以挂钩到 serialize() 方法并从那里截取写入,但它似乎一个接一个地写入键和值。 ToXmlGenerator 有一个名为 setNextIsAttribute() 的方法,但我不知道如何挂钩。
【问题讨论】: