java - Jackson 序列化 - 动态更改元素名称
问题描述
我有以下必须转换为 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
like
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)中有解决方案,请不要吝啬我!
解决方案
一些想法:
- 将您的 bean 序列化为 xml,然后应用 xslt 转换来重命名标签/更改结构以更接近您想要的 json
- 使用 jackson 注释创建 pojo 并使用 jackson xml 模块反序列化
- 从 pojo 序列化为 json
或者
- 根据您的目标 json 创建带有杰克逊注解的 pojo
- 使用 dozer 之类的 bean 映射器将 bean 映射到 pojo
- 从 pojo 序列化为 json
推荐阅读
- python - 对 excel 数据进行哈希处理以检测使用 openpyxl 更改的数据
- intellij-idea - 打印 IntelliJ IDEA 有效系统属性
- javascript - 我如何拉出一个选择它显示了区域的大小
- c# - 如何将 ByteSerialize 属性/长度分配为变量
- python-2.7 - 在python中解析ansible库存中的变量
- c# - 如何在 SenseNet 中覆盖组权限而不是用户权限?
- c++ - 如何将数组元素与其他变量“连接”?
- c# - 如何使用 HttpClient 发布表单数据 IFormFile?
- if-statement - sap hana 计算列检查多个 ID
- android - iOS 上的 DeviceEventEmitter