【问题标题】:How to transform xml into json (and vice versa) if the data contains lists?如果数据包含列表,如何将 xml 转换为 json(反之亦然)?
【发布时间】:2021-11-22 08:44:36
【问题描述】:

我正在尝试使用 Jackson(2.9.4 版)创建一个简单的 xml-json 转换器,但列表有问题。

package testes;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class Main {
    public static void main(String[] args) throws Exception {
        String x = "{\"a\":[{\"b\":1,\"c\":true,\"d\":\"teste\"},{\"b\":2,\"c\":false,\"d\":\"texto\"}]}";
        System.err.println("original: " + x);
        x = jsonToXml(x);
        System.err.println("xml: " + x);
        x = xmlToJson(x);
        System.err.println("json: " + x);
    }

    private static final ObjectMapper jsonMapper = new ObjectMapper();
    private static final ObjectMapper xmlMapper = new XmlMapper().setDefaultUseWrapper(true);

    public static final String jsonToXml(String json) throws Exception {
        final JsonNode node = jsonMapper.readTree(json);
        return xmlMapper.writeValueAsString(node);
    }

    public static final String xmlToJson(String xml) throws Exception {
        final JsonNode node = xmlMapper.readTree(xml);
        return jsonMapper.writeValueAsString(node);
    }
}

输出:

original: {"a":[{"b":1,"c":true,"d":"teste"},{"b":2,"c":false,"d":"texto"}]}
xml: <ObjectNode><a><b>1</b><c>true</c><d>teste</d></a><a><b>2</b><c>false</c><d>texto</d></a></ObjectNode>
json: {"a":{"b":"2","c":"false","d":"texto"}}

是否可以调整设置以使列表在格式之间正确转换?

我不明白该属性

.setDefaultUseWrapper(true);

应该已经完成​​了这项工作。

【问题讨论】:

    标签: java json xml jackson


    【解决方案1】:

    Underscore-java 库有静态方法 U.jsonToml(json) 和 U.xmlToJson(xml)。

    JSON:

    {"a":[{"b":1,"c":true,"d":"teste"},{"b":2,"c":false,"d":"texto"}]}
    

    XML:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
      <a>
        <b number="true">1</b>
        <c boolean="true">true</c>
        <d>teste</d>
      </a>
      <a>
        <b number="true">2</b>
        <c boolean="true">false</c>
        <d>texto</d>
      </a>
    </root>
    

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 2010-12-04
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多