JavaScript实现的XML与JSON互转功能详解

JavaScript实现的XML与JSON互转功能详解

近年来,JSON已经成为了web开发中常用的数据格式,而XML在一些特定领域也有着广泛应用。在web开发中,我们有时需要将XML数据转换为JSON格式,或者将JSON格式转换为XML数据,这就需要用到JavaScript实现的XML和JSON互转功能。

什么是XML

XML是可扩展标记语言(Extensible Markup Language)的简称。它是一种由W3C推荐的标记语言,用于描述数据结构,其本质是一种文本格式。与HTML类似,XML通过标签来描述数据。XML文档中包含的元素结构具有可扩展性,允许用户自定义标签。这使得XML可以在各种系统和平台之间传递和共享数据。

下面是一个简单的XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author> Douglas Crockford</author>
  <price>20.00</price>
</book>

什么是JSON

JSON是JavaScript Object Notation的简称,它是一种轻量级的数据交换格式,常用于web开发中传递数据。JSON数据格式以键值对的形式表示,使用大括号{}和方括号[]来表示对象和数组。

下面是一个简单的JSON示例:

{
  "title": "JavaScript: The Good Parts",
  "author": "Douglas Crockford",
  "price": 20.00
}

JavaScript实现XML与JSON互转

JavaScript实现XML和JSON的互转功能,需要使用两个内置对象:XMLHttpRequest和DOMParser。XMLHttpRequest用于处理XML数据,DOMParser可以将XML数据转换为DOM对象。

将XML转换为JSON

将XML转换为JSON,首先需要将XML数据解析为DOM对象,然后通过遍历DOM对象,将其转换为JavaScript对象,最后使用JSON.stringify将JavaScript对象转换为JSON字符串。

以下是将上面XML示例转换为JSON的代码:

let xml = `<?xml version="1.0" encoding="UTF-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author> Douglas Crockford</author>
  <price>20.00</price>
</book>`;

let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xml, "text/xml");

let book = {};
let bookElement = xmlDoc.getElementsByTagName("book")[0];
for (let i = 0; i < bookElement.childNodes.length; i++) {
  let node = bookElement.childNodes[i];
  if (node.nodeType === 1) {
    book[node.nodeName] = node.childNodes[0].nodeValue;
  }
}

let json = JSON.stringify(book);
console.log(json);

输出结果:

{
  "title": "JavaScript: The Good Parts",
  "author": " Douglas Crockford",
  "price": "20.00"
}

将JSON转换为XML

将JSON转换为XML,需要先使用JSON.parse将JSON字符串解析为JavaScript对象,然后通过创建DOM对象,将JavaScript对象转换为DOM对象,最后使用XMLSerializer将DOM对象转换为XML字符串。

以下是将上面JSON示例转换为XML的代码:

let json = `{
  "title": "JavaScript: The Good Parts",
  "author": "Douglas Crockford",
  "price": 20.00
}`;

let book = JSON.parse(json);

let xmlDoc = document.implementation.createDocument(null, "book", null);

let bookElement = xmlDoc.getElementsByTagName("book")[0];

for (let key in book) {
  let element = xmlDoc.createElement(key);
  let text = xmlDoc.createTextNode(book[key]);
  element.appendChild(text);
  bookElement.appendChild(element);
}

let serializer = new XMLSerializer();
let xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);

输出结果:

<?xml version="1.0" encoding="utf-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author>Douglas Crockford</author>
  <price>20</price>
</book>

示例说明

下面给出两个示例说明。

示例一

XML数据:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employee>
    <name>张三</name>
    <age>24</age>
    <position>工程师</position>
  </employee>
  <employee>
    <name>李四</name>
    <age>30</age>
    <position>经理</position>
  </employee>
</company>

将XML数据转换为JSON:

let xml = `<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employee>
    <name>张三</name>
    <age>24</age>
    <position>工程师</position>
  </employee>
  <employee>
    <name>李四</name>
    <age>30</age>
    <position>经理</position>
  </employee>
</company>`;

let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xml, "text/xml");

let company = {};
let companyElement = xmlDoc.getElementsByTagName("company")[0];
let employees = [];
for (let i = 0; i < companyElement.childNodes.length; i++) {
  let node = companyElement.childNodes[i];
  if (node.nodeType === 1 && node.nodeName === "employee") {
    let employee = {};
    for (let j = 0; j < node.childNodes.length; j++) {
      let childNode = node.childNodes[j];
      if (childNode.nodeType === 1) {
        employee[childNode.nodeName] = childNode.childNodes[0].nodeValue;
      }
    }
    employees.push(employee);
  }
}
company.employees = employees;

let json = JSON.stringify(company);
console.log(json);

输出结果:

{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ]
}

示例二

JSON数据:

{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ],
  "companyName": "ABC公司"
}

将JSON数据转换为XML:

let json = `{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ],
  "companyName": "ABC公司"
}`;

let company = JSON.parse(json);

let xmlDoc = document.implementation.createDocument(null, "company", null);

let companyElement = xmlDoc.getElementsByTagName("company")[0];

let employeesElement = xmlDoc.createElement("employees");

for (let i = 0; i < company.employees.length; i++) {
  let employee = company.employees[i];
  let employeeElement = xmlDoc.createElement("employee");
  let nameElement = xmlDoc.createElement("name");
  let nameText = xmlDoc.createTextNode(employee.name);
  nameElement.appendChild(nameText);
  employeeElement.appendChild(nameElement);

  let ageElement = xmlDoc.createElement("age");
  let ageText = xmlDoc.createTextNode(employee.age);
  ageElement.appendChild(ageText);
  employeeElement.appendChild(ageElement);

  let positionElement = xmlDoc.createElement("position");
  let positionText = xmlDoc.createTextNode(employee.position);
  positionElement.appendChild(positionText);
  employeeElement.appendChild(positionElement);

  employeesElement.appendChild(employeeElement);
}

companyElement.appendChild(employeesElement);

let companyNameElement = xmlDoc.createElement("companyName");
let companyNameText = xmlDoc.createTextNode(company.companyName);
companyNameElement.appendChild(companyNameText);
companyElement.appendChild(companyNameElement);

let serializer = new XMLSerializer();
let xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);

输出结果:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employees>
    <employee>
      <name>张三</name>
      <age>24</age>
      <position>工程师</position>
    </employee>
    <employee>
      <name>李四</name>
      <age>30</age>
      <position>经理</position>
    </employee>
  </employees>
  <companyName>ABC公司</companyName>
</company>

总结

JavaScript实现XML和JSON的互转功能,可以使用XMLHttpRequest和DOMParser将XML转换为JavaScript对象,然后使用JSON.stringify将JavaScript对象转换为JSON字符串;使用JSON.parse将JSON字符串转换为JavaScript对象,然后创建DOM对象将JavaScript对象转换为DOM对象,最后使用XMLSerializer将DOM对象转换为XML字符串。在实际应用中,根据所需数据的格式,选择XML或JSON进行数据交互。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现的XML与JSON互转功能详解 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JS实现的自动打字效果示例

    接下来我将为你讲解“JS实现的自动打字效果示例”的完整攻略。 这是一个比较常见的网页效果,可以使用 JavaScript 来实现。整个过程大体可分为以下几个步骤: 步骤一:准备 HTML 结构 首先,你需要准备一个包含文字内容的 HTML 元素,例如: <div id="text"> <p>这是一段文本内容,我们将…

    JavaScript 2023年5月28日
    00
  • JS实现继承的几种常用方式示例

    下面是详细的“JS实现继承的几种常用方式示例”的完整攻略。 什么是继承 继承是一种代码复用的技术,它使得子类获得父类的属性和方法。在 JavaScript 中,实现继承有多种方式,本文将介绍几种常用的方式。 实现继承的几种常用方式 原型链继承 原型链继承是通过设置子类的原型对象指向父类的实例对象实现的。这样就可以使子类继承父类的属性和方法。当在子类实例中查找…

    JavaScript 2023年5月28日
    00
  • JavaScript实现自动生成网页元素功能(按钮、文本等)

    让我们来详细讲解一下“JavaScript实现自动生成网页元素功能(按钮、文本等)”的完整攻略。 1. 需求分析 要实现自动生成网页元素功能,首先需要明确我们的需求和目标。我们的目标是在用户输入指定的元素类型和数量后,自动生成对应的HTML元素,比如按钮、文本输入框等。可以参考以下的需求分析: 需要一个表单,供用户填写元素类型和数量。表单设计可以参考以下样式…

    JavaScript 2023年6月10日
    00
  • JavaScript的防抖和节流一起来了解下

    JavaScript的防抖和节流一起来了解下 概念介绍 防抖和节流都是为了减少某些高频率事件的触发次数。在JavaScript中常用于优化性能或者提升用户体验。 防抖(debounce)指的是一段时间内重复触发同一事件,只执行一次函数的方法。可以使用定时器实现,如下代码所示: function debounce(fn, delay) { let timer …

    JavaScript 2023年6月11日
    00
  • javascript字符串与数组转换汇总

    JavaScript字符串与数组转换汇总 在JavaScript中,字符串和数组是我们常用的数据类型之一。但是,在实际的工程中可能需要字符串和数组之间进行转换,这时候就需要借助一些强大的转换方法来实现。这里我们集中介绍一下JavaScript字符串与数组转换的方法以及使用场景。 1. 字符串转换为数组 字符串转换为数组通常采用以下方法: 1.1 split(…

    JavaScript 2023年5月27日
    00
  • Vue刷新后页面数据丢失问题的解决过程

    下面我将详细讲解“Vue刷新后页面数据丢失问题的解决过程”的完整攻略。 问题背景 在Vue开发过程中,我们经常会遇到Vue刷新后页面数据丢失的问题,这是由于Vue是单页应用程序,数据存储在内存中,当浏览器刷新时,内存中的数据会被清空,导致数据丢失。 解决方案 方案1:使用localStorage存储数据 我们可以使用localStorage将数据存储到本地浏…

    JavaScript 2023年6月11日
    00
  • js浏览器html5表单验证

    下面是“JS浏览器HTML5表单验证”的完整攻略。 1. 前言 HTML5表单验证是一个Web开发中非常重要的组成部分,而这些验证可以使用HTML5的属性来完成。但是这些验证可能无法满足开发人员的特定需求,所以我们需要使用JavaScript来完成这个工作。在这里,我们将学习如何使用javascript实现HTML5表单验证。 2. 表单中常用的验证 HTM…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符

    学习笔记4:JavaScript运算符和操作符 JavaScript中的运算符是用于执行各种数学和逻辑操作的符号。操作数可以是变量、常量、表达式或函数的结果。本文将带领读者掌握JavaScript中的基本运算符和操作符。 运算符 运算符是用于执行数学计算的符号,如加号、减号、乘号、除号、取余等。以下是JavaScript中常见的运算符: 算术运算符 运算符 …

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部