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正则表达式修饰符中multiline(/m)用法分析

    JS正则表达式修饰符中multiline(/m)用法是指让正则表达式中的锚点(^和$)可以匹配字符串的多行文本,而不是只匹配整个字符串的开头和结尾。下面是该修饰符的用法分析: multiline(/m)用法分析 多行模式(/m)是JS正则表达式中的一个修饰符,它可以让正则表达式中的锚点(^和$)匹配多行文本。 多行模式(/m)示例 举个例子,假设有以下字符串…

    JavaScript 2023年5月28日
    00
  • Javascript的console[”]常用输入方法汇总

    下面是对“Javascript的console[”]常用输入方法汇总”的详细讲解攻略。 Javascript的console[”]常用输入方法汇总 在Javascript编程中,console对象是一个非常有用的工具,它提供了各种有用的函数和方法,用于在开发过程中进行调试和错误排除。其中,console[”]方法就是一个常用的工具,它允许您在控制台中输…

    JavaScript 2023年5月28日
    00
  • JavaScript之String常见的方法详解

    JavaScript之String常见的方法详解 概述 在JavaScript中,字符串是一个非常重要的数据类型。我们经常需要对字符串进行各种操作以满足业务需求。这篇文章将介绍JavaScript中字符串常见的方法,包括获取字符串长度、字符串连接、字符串截取、查找字符串位置等。 获取字符串长度 获取字符串的长度,可以通过字符串的length属性获取,它会返回…

    JavaScript 2023年5月27日
    00
  • JS实现新建文件夹功能

    下面我们来讲解一下JS实现新建文件夹的功能的完整攻略。 1. 前置知识 在开始阐述具体实现方法之前,我们先简单介绍一下一些前置知识: HTML: 用于搭建页面结构 CSS: 用于美化页面样式 JavaScript(JS): 在页面中增加交互动态效果 其中,前两项是每个Web开发者的基本功,这里不再赘述,主要介绍JS的相关知识。 JS通常用于给页面添加动态交互…

    JavaScript 2023年5月27日
    00
  • 关于JavaScript中的this指向问题总结篇

    详细讲解“关于JavaScript中的this指向问题总结篇”的完整攻略 一、背景及概述 JavaScript的this关键字是指向函数执行的上下文,但是在不同的情况下,this所指向的上下文可能会有所不同。前端工程师在编写JavaScript代码时,常常会遇到this指向问题,如何准确地理解和掌握this指向的问题,是我们开发高质量JavaScript代码…

    JavaScript 2023年6月10日
    00
  • JavaScript将字符串转换为整数的方法

    JavaScript中将字符串转换成整数的方法有多种,以下是其中的四种方法。 1. parseFloat方法 parseFloat方法将字符串解析成浮点数,如果字符串开头部分可以解析成浮点数的话,就返回该浮点数,否则返回NaN。 let str = "1234.567"; let num = parseFloat(str); consol…

    JavaScript 2023年5月28日
    00
  • javaScript语法总结

    JavaScript语法总结 1. 变量与数据类型 JavaScript的数据类型分为基本数据类型和引用数据类型。基本数据类型包括数字、字符串、布尔值、null和undefined,引用数据类型包括对象、数组和函数。 1.1 变量的声明 在JavaScript中,通过 var、let、const 关键字声明一个变量。 var 声明的变量为函数作用域,let …

    JavaScript 2023年5月17日
    00
  • JavaScript中数组Array方法详解

    JavaScript中数组Array方法详解 在JavaScript中,Array是一个非常重要的数据类型,它提供了很多有用的方法来对数组进行操作。在本文中,我们将会学习到这些方法的具体用法和示例。 创建数组 在JavaScript中,我们可以通过以下方式创建一个数组: // 方式1:使用[]括号 const arr1 = []; // 方式2:使用Arra…

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