【发布时间】:2020-07-15 10:48:49
【问题描述】:
我有以下必须转换为 JSON 的 XML:
<acme>
<acme_name>1</acme_name>
<acme_type>2</acme_type>
<desc>desc0</desc>
</acme>
我想要以下 JSON:
{
"acme":{
"name":"1",
"type":"2",
"desc":"desc0"
}
}
所以我想要的是
- 如果元素名称包含下划线,则使用文本作为下划线后面的元素名称
- 保持其他元素名称不变
在 XML 后面有带有 @XmlElement 注释的 Java bean。
我不能在 Java bean 中使用 jackson 注释,因为这些类来自第 3 方源。
我以为我可以使用JsonSerializer 喜欢
class GeneralSerializer extends JsonSerializer {
@Override
public void serialize(Object value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
...
}
}
但我必须指定要序列化的 Java bean(见下文),并且我不能对所有元素使用相同的序列化程序。
public class ItemSerializer extends JsonSerializer<Item>
问题在于 XML 中有很多不同的元素,并指定它们执行相同操作的序列化程序(即搜索下划线字符并仅使用其后的文本)似乎有点矫枉过正。
我能否指定一个可应用于每个元素的通用序列化程序?
有没有其他解决方案?
感谢您的帮助!
----------------- 更新 1 -----------------
我想强调的是,我没有 XML 文本,但我有代表 XML 的 Java bean(用 @Xml... 注释)。
----------------- 更新 2 -----------------
我不坚持杰克逊。如果另一个 JSON 库(例如 GSON)中有解决方案,请不要放过我!
【问题讨论】:
-
您可以将文本序列化为 Map
,然后遍历所有叶子并根据需要重写。 -
用它构造一个 DOM,循环遍历它并随心所欲地编写
-
您好,感谢您的回复!我有 Java bean 而不是 XML 文本。冷你请详细说明你的想法?谢谢!