xml转json的js代码

XML转JSON是开发过程中常见的问题,有时候需要将后端返回的XML数据转换为前端需要的JSON格式。以下是XML转JSON的JS代码的详细攻略:

一、XML转JSON的原理

XML和JSON是两种不同的数据格式,因此需要编写代码将XML转换为JSON格式。XML数据以标签为基础,有嵌套的结构关系,而JSON数据则以键值对为基础,没有嵌套的结构关系。因此,将XML转成JSON需要把XML中的标签转成JSON的键,将标签中的内容转成JSON的值,最后将所有生成的键值对组成JSON对象。

二、XML转JSON的步骤

1.获取XML对象

首先需要通过XMLHttpRequest获取XML对象,例如:

let xhr = new XMLHttpRequest();

xhr.onload = function() {
  if (xhr.status == 200) {
    let xmlData = xhr.responseXML; //获取XML对象
  }
}
xhr.open('GET', 'example.xml', true);
xhr.send();

2.解析XML对象

通过DOM方式或SAX方式解析XML对象来获取标签名称和标签值,例如使用DOM方式解析XML对象:

let xmlData = xhr.responseXML;
let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xmlData, "text/xml");
let rootElement = xmlDoc.documentElement;

在获取了XML对象之后,需要使用DOMParser对象将XML解析为一个文档对象(Document)。

3.转换JSON对象

解析XML对象后,需要将XML转换为JSON对象,这里举一个简单的例子,比如以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="children">
    <title>The Cat in the Hat</title>
    <author>Dr. Seuss</author>
    <year>1957</year>
  </book>
  <book category="web">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
  </book>
</bookstore>

使用以下代码可以将其转换为JSON对象:

function xmlToJson(xml) {
  let obj = {};

  if (xml.nodeType == 1) {
    if (xml.attributes.length > 0) {
      obj["@attributes"] = {};
      for (let i = 0; i < xml.attributes.length; i++) {
        let attribute = xml.attributes.item(i);
        obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
      }
    }
  } else if (xml.nodeType == 3) {
    obj = xml.nodeValue.trim();
  }

  if (xml.hasChildNodes()) {
    for (let i = 0; i < xml.childNodes.length; i++) {
      let item = xml.childNodes.item(i);
      let nodeName = item.nodeName;

      if (typeof(obj[nodeName]) == "undefined") {
        obj[nodeName] = xmlToJson(item);
      } else {
        if (typeof(obj[nodeName].push) == "undefined") {
          let old = obj[nodeName];
          obj[nodeName] = [];
          obj[nodeName].push(old);
        }

        obj[nodeName].push(xmlToJson(item));
      }
    }
  }

  return obj;
}

let json = JSON.stringify(xmlToJson(rootElement));

通过递归遍历XML文件中的所有节点,将XML节点转化为JSON格式的数据。

转换后的JSON对象为:

{
  "bookstore": {
    "book": [
      {
        "@attributes": {
          "category": "children"
        },
        "title": "The Cat in the Hat",
        "author": "Dr. Seuss",
        "year": "1957"
      },
      {
        "@attributes": {
          "category": "web"
        },
        "title": "Learning XML",
        "author": "Erik T. Ray",
        "year": "2003"
      }
    ]
  }
}

三、XML转JSON的示例

以下是针对上述的XML文件,使用XML转JSON的JS代码的完整示例:

let xhr = new XMLHttpRequest();

xhr.onload = function() {
  if (xhr.status == 200) {
    let xmlData = xhr.responseXML;
    let parser = new DOMParser();
    let xmlDoc = parser.parseFromString(xmlData, "text/xml");
    let rootElement = xmlDoc.documentElement;

    function xmlToJson(xml) {
      let obj = {};

      if (xml.nodeType == 1) {
        if (xml.attributes.length > 0) {
          obj["@attributes"] = {};
          for (let i = 0; i < xml.attributes.length; i++) {
            let attribute = xml.attributes.item(i);
            obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
          }
        }
      } else if (xml.nodeType == 3) {
        obj = xml.nodeValue.trim();
      }

      if (xml.hasChildNodes()) {
        for (let i = 0; i < xml.childNodes.length; i++) {
          let item = xml.childNodes.item(i);
          let nodeName = item.nodeName;

          if (typeof(obj[nodeName]) == "undefined") {
            obj[nodeName] = xmlToJson(item);
          } else {
            if (typeof(obj[nodeName].push) == "undefined") {
              let old = obj[nodeName];
              obj[nodeName] = [];
              obj[nodeName].push(old);
            }

            obj[nodeName].push(xmlToJson(item));
          }
        }
      }

      return obj;
    }

    let json = JSON.stringify(xmlToJson(rootElement));
    console.log(json);
  }
}
xhr.open('GET', 'example.xml', true);
xhr.send();

执行结果为:

{
  "bookstore": {
    "book": [
      {
        "@attributes": {
          "category": "children"
        },
        "title": "The Cat in the Hat",
        "author": "Dr. Seuss",
        "year": "1957"
      },
      {
        "@attributes": {
          "category": "web"
        },
        "title": "Learning XML",
        "author": "Erik T. Ray",
        "year": "2003"
      }
    ]
  }
}

另外,对于一些常用的前端框架,如Vue.js、React等都有相关的第三方库可以方便地进行XML转JSON的操作,使用时也可以考虑使用这些库来简化开发过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:xml转json的js代码 - Python技术站

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

相关文章

  • 前端HTTP发POST请求携带参数与后端接口接收参数的实现

    下面是详细讲解“前端HTTP发POST请求携带参数与后端接口接收参数的实现”的完整攻略。 一、前端HTTP发POST请求携带参数的实现 1. 使用XMLHttpRequest XMLHttpRequest是前端与服务器进行数据交互最常用的方式。要发送带有参数的POST请求,需要设置请求头和请求体。请求体是以字符串形式发送给服务器的,一般将参数转换成JSON或…

    JavaScript 2023年5月19日
    00
  • javascript自定义加载loading效果

    下面我将详细讲解“JavaScript自定义加载loading效果”的完整攻略,主要分为以下几个部分: 一、理解loading效果 1.1 什么是loading效果 loading效果是指在页面或某个模块正在进行加载操作时,为了提高用户体验而展示的一种动态效果。 1.2 loading效果的重要性 loading效果是提升用户体验的关键环节。当用户在浏览网页…

    JavaScript 2023年5月27日
    00
  • javascript函数式编程实例分析

    JavaScript函数式编程实例分析 函数式编程是一种编程范式,强调函数的纯粹性和不可变性,具有良好的组合性和可维护性。本文将介绍JavaScript中函数式编程的应用实例和示例。 纯函数与不纯函数 在函数式编程中,函数可以分为纯函数和不纯函数两种。 纯函数是指输入相同,输出结果也相同的函数,不会对除自身以外的外部环境造成影响。如下面的add函数: fun…

    JavaScript 2023年5月27日
    00
  • javaScript中with函数用法实例分析

    JavaScript中with函数用法实例分析 with函数是JavaScript中的一个特殊函数,用来简化代码编写。尽管with函数的用法看起来很简单,但是使用不当可能会导致代码混乱,因此在使用with函数时需要谨慎。 本文将从以下方面详细讲解with函数的用法,包括: with函数的用法 with函数的实例分析 with函数的用法 with函数的语法: …

    JavaScript 2023年6月10日
    00
  • js cookies实现简单统计访问次数

    下面是详细讲解“js cookies实现简单统计访问次数”的完整攻略: 1. 什么是cookies? Cookie,有时也用复数形式Cookies,指某些网站为了辨别用户身份、进行Session跟踪而储存在用户本地终端上的数据(通常经过加密)。Cookies是网站为了维护用户状态而储存在用户本地终端上的数据。 2. 如何利用js实现统计访问次数? 实现网站的…

    JavaScript 2023年6月11日
    00
  • js检测iframe是否加载完成的方法

    当一个页面中嵌入了一个iframe时,有时我们需要在iframe加载完成后执行一些特定的操作。这时候,我们就需要检测iframe是否已经加载完成。下面是几种js检测iframe是否加载完成的方法。 方法一:使用iframe的load事件 可以通过给iframe绑定load事件来检测iframe是否加载完成。示例代码如下: var iframe = docum…

    JavaScript 2023年5月27日
    00
  • 深入理解 ES6中的 Reflect用法

    关于“深入理解 ES6中的 Reflect用法”,以下是一份详尽的攻略。 什么是Reflect? Reflect是在ES6中新加入的全局对象,它提供了一些用于操作对象的方法,并且这些方法与语言内部的操作保持一致,比如Reflect.get方法就是对象属性的取值方法,对应到语言内部的操作就是读取属性。Reflect方法的设计理念是让对象操作更加清晰、简洁、易于…

    JavaScript 2023年6月10日
    00
  • JavaScript生成二维码图片小结

    使用JavaScript生成二维码图片可以方便地分享一些跨平台内容,比如网址、联系方式、文本等等。下面是一个详细的攻略: 安装qrcode库 在使用JavaScript生成二维码图片之前,我们需要先安装相应的库。这里我们使用qrcode库,它可以非常方便地生成二维码图片。在命令行中输入以下命令进行安装: npm install qrcode –save 导…

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