【工具】XML和JSON互相转换

1、JSON解析为XML

function parseJSONToXML(json) {
  let xmlDoc = document.implementation.createDocument(null, '');

  function parseValue(value, parentElement) {
    if (Array.isArray(value)) {
      for (let item of value) {
        let arrayElement = xmlDoc.createElement(parentElement.tagName);
        parseValue(item, arrayElement);
        if (parentElement) {
          parentElement.appendChild(arrayElement);
        }
      }
    } else if (typeof value === 'object') {
      parseObject(value, parentElement);
    } else {
      parentElement.textContent = value;
    }
  }

  function parseObject(obj, parentElement) {
    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        let value = obj[key];
        let element = xmlDoc.createElement(key);

        parseValue(value, element);

        if (parentElement) {
          parentElement.appendChild(element);
        } else {
          xmlDoc.appendChild(element);
        }
      }
    }
  }

  parseObject(json, null);

  let serializer = new XMLSerializer();
  return '<?xml version="1.0" encoding="UTF-8"?>' + serializer.serializeToString(xmlDoc);
}

// 使用示例
let json = {
  root: {
    name: 'John',
    age: 30,
    addresses: [
      { street: 'Main St', city: 'City1' },
      { street: 'Second St', city: 'City2' }
    ]
  }
};

let xmlString = parseJSONToXML(json);
console.log(xmlString);

2、XML解析为JSON

function parseXMLToJSON(xml) {
  let parser = new DOMParser();
  let xmlDoc = parser.parseFromString(xml, 'text/xml');

  function parseElement(element) {
    let obj = {};
    if (element.hasChildNodes()) {
      let nestedElements = Array.from(element.children);
      if (nestedElements.length > 0) {
        nestedElements.forEach((nestedElement) => {
          let key = nestedElement.tagName;
          let value = parseElement(nestedElement);
          if (obj.hasOwnProperty(key)) {
            if (!Array.isArray(obj[key])) {
              obj[key] = [obj[key]];
            }
            obj[key].push(value);
          } else {
            obj[key] = value;
          }
        });
      } else {
        obj = element.textContent;
      }
    }
    return obj;
  }

  let rootNode = xmlDoc.documentElement;
  let json = {};
  let rootElement = parseElement(rootNode);
  json[rootNode.tagName] = rootElement;

  return JSON.stringify(json);
}

// 使用示例
let xmlString = '<?xml version="1.0" encoding="UTF-8"?><root><name>John</name><age>30</age><addresses><street>Main St</street><city>City1</city></addresses><addresses><street>Second St</street><city>City2</city></addresses></root>';

let json = parseXMLToJSON(xmlString);
console.log(json);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 目前有许多Java工具可以用于JSONXML之间的转换。 1. Jackson库:Jackson是一个功能强大的Java库,可用于JSONXML之间的转换。它提供了几个简单而强大的API,使转换变得容易。使用Jackson,您可以将JSON数据解析为Java对象,并将Java对象序列化为JSONXML格式。 2. Gson库:Gson是Google提供的另一个流行的Java库,可用于JSONXML转换。它提供了简单的API,可以轻松地将JSON数据解析为Java对象,并将Java对象序列化为JSONXML。 3. JAXB(Java Architecture for XML Binding):JAXB是Java中用于处理XML数据绑定的标准库。它允许您将Java对象与XML文档之间进行转换。通过使用JAXB提供的注解和API,您可以将XML数据映射到Java对象,并将Java对象序列化为XML格式。 4. XStream库:XStream是一个简单的Java库,可用于将Java对象序列化为XML格式,并将XML反序列化为Java对象。它提供了简单的API和注解来指定对象的转换规则。 无论您选择哪个工具,都应该考虑以下因素:易用性,性能,对复杂数据类型的支持以及与您的项目的兼容性。 ### 回答2: 在Java中,我们可以使用许多工具来进行JSONXMLXMLJSON转换。以下是一些常用的工具: 1. Jackson库:Jackson是一个功能强大的Java库,提供了许多用于处理JSONXML工具。它可以用于将JSON转换XML和将XML转换JSON。它提供了一套简单易用的API,可以轻松地在Java应用程序中进行转换操作。 2. Gson库:Gson是一个由Google开发的Java库,用于处理JSON数据。它提供了将JSON转换XML和将XML转换JSON的功能。Gson库使用简单,并且具有广泛的社区支持。 3. XStream库:XStream是一个流行的Java库,用于将Java对象序列化为XMLJSON。它提供了方便的API,可以轻松地在Java应用程序中进行转换操作。XStream支持自定义转换器和注释,可以满足各种转换需求。 4. JAXB库:JAXB是Java体系结构的一部分,用于将Java对象转换XML和将XML转换为Java对象。它提供了一组注解,可以方便地在Java类和XML元素之间进行映射。 这些工具在Java开发中被广泛使用,并且具有成熟的文档和社区支持。根据具体的需求和偏好,选择适合自己项目的工具进行JSONXML之间的转换

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兵腾傲宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值