📜  使用 Node.js 将 xml 数据转换为 json(1)

📅  最后修改于: 2023-12-03 15:22:14.719000             🧑  作者: Mango

使用 Node.js 将 XML 数据转换为 JSON

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,可以让 JavaScript 在服务器端运行。在 Node.js 中,我们可以很方便地将 XML 数据转换为 JSON。

XML 和 JSON 简介

XML 是一种标记语言,用来存储和传输数据。XML 采用树形结构组织数据,每个标签都有一个标签名和一些属性。XML 的示例:

<person>
  <name>John</name>
  <age>30</age>
  <address>
    <street>Main St.</street>
    <city>Anytown</city>
  </address>
</person>

JSON 是 JavaScript 对象表示法的缩写,是一种轻量级的数据交换格式。JSON 使用键值对的方式表示数据,它可以表示简单数据类型、数组和对象。JSON 的示例:

{
  "person": {
    "name": "John",
    "age": 30,
    "address": {
      "street": "Main St.",
      "city": "Anytown"
    }
  }
}
将 XML 转换为 JSON

使用 Node.js 的 xml2js 模块可以将 XML 数据转换为 JSON。首先需要全局安装 xml2js:

npm install -g xml2js

在程序中使用时,我们需要先引入 xml2js 模块:

const xml2js = require('xml2js');

接下来,我们需要将 XML 数据转换为 JavaScript 对象,再将该对象转换为 JSON 字符串。这可以通过 xml2js.Parser 对象中的 parseString() 方法实现:

const xmlString = '<person><name>John</name><age>30</age><address><street>Main St.</street><city>Anytown</city></address></person>';

const parser = new xml2js.Parser();
parser.parseString(xmlString, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    const jsonData = JSON.stringify(result);
    console.log(jsonData);
  }
});

运行程序,我们将得到以下 JSON 数据:

{
  "person": {
    "name": [
      "John"
    ],
    "age": [
      "30"
    ],
    "address": [
      {
        "street": [
          "Main St."
        ],
        "city": [
          "Anytown"
        ]
      }
    ]
  }
}

注意,xml2js 输出的属性值默认是数组,即使元素只有一个。为了避免这种情况,可以在 xml2js.Parser 对象中设置 mergeAttrs 选项为 true,这样相同的属性就会合并为一个对象:

const parser = new xml2js.Parser({ mergeAttrs: true });
将 JSON 转换为 XML

与将 XML 转换为 JSON 相反,我们可以使用 xmlbuilder 模块将 JSON 数据转换为 XML。首先需要全局安装 xmlbuilder:

npm install -g xmlbuilder

在程序中使用时,我们需要先引入 xmlbuilder 模块:

const xmlbuilder = require('xmlbuilder');

接下来,我们需要将 JSON 数据转换为 JavaScript 对象,再使用 xmlbuilder.create() 方法将该对象转换为 XML 字符串。使用时需要注意,JSON 中的每个键值对都会映射到一个 XML 标签。例如,JSON 中的 name 属性会映射到一个 标签。使用时可以通过 JSON 数据的结构来决定 XML 的结构。

示例代码:

const jsonData = {
  "person": {
    "name": "John",
    "age": 30,
    "address": {
      "street": "Main St.",
      "city": "Anytown"
    }
  }
};

const xmlString = xmlbuilder.create(jsonData).end({ pretty: true });
console.log(xmlString);

运行程序,我们将得到以下 XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<person>
  <name>John</name>
  <age>30</age>
  <address>
    <street>Main St.</street>
    <city>Anytown</city>
  </address>
</person>
总结

在 Node.js 中,我们可以通过 xml2js 和 xmlbuilder 模块很方便地将 XML 数据和 JSON 数据相互转换。借助这些模块,我们可以更灵活地处理数据,并更有效地与其他平台交互。