【问题标题】:Generate XML with attributes from generic JSON使用通用 JSON 的属性生成 XML
【发布时间】: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 并将其写入 XML。

    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() 的方法,但我不知道如何挂钩。

【问题讨论】:

    标签: java json xml jackson


    【解决方案1】:

    Underscore-java 库有静态方法 U.jsonToXml(json)。

    JSON

    {
      "data" : {
        "key1" : "value1",
        "key2" : {
          "value": "value2",
          "attribute#someattribute": "value3"
        }
      }
    }
    

    XML

    <?xml version="1.0" encoding="UTF-8"?>
    <data>
      <key1>value1</key1>
      <key2>
        <value>value2</value>
        <attribute__EM__someattribute>value3</attribute__EM__someattribute>
      </key2>
    </data>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 2022-07-01
      • 2022-08-03
      相关资源
      最近更新 更多