簡體   English   中英

Jackson 序列化 - 動態更改元素名稱

[英]Jackson serialization - dynamically change element name

我有以下 XML 必須轉換為 JSON:

<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 文本,但我有代表 Z3501BB093D363810B671059B9CFED3FZ8 的 Java bean(用 @Xml 注釋...)

----------------- 更新 2 -----------------

我不堅持Jackson。 如果另一個 JSON 庫(例如 GSON)中有解決方案,請不要吝嗇我!

一些想法:

  1. 將您的 bean 序列化為 xml,然后應用 xslt 轉換以重命名標簽/更改結構以更接近您想要的 json
  2. 使用 jackson 注釋創建 pojo 並使用 jackson xml 模塊反序列化
  3. 從 pojo 序列化到 json

或者

  1. 根據您的目標 json 使用 jackson 注釋創建 pojo
  2. 使用像推土機這樣的 bean 映射器到 map bean 到 pojo
  3. 從 pojo 序列化到 json

http://dozer.sourceforge.net/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM