本教程介绍了如何在javascript和Nodejs应用程序中将XML转换为JSON。
XML是一种扩展标记语言,它包含了父标签关系中的属性或标签。JSOn是一种简单的格式,它有一个键和值对,包含在parenthiss{} 。
两者都用于存储不同类型的数据,在nodejs和javascript中没有手动转换类型的问题。
创建一个Nodejs项目
我们将从头开始创建一个nodejs应用程序的创建。
让我们使用npm init 命令创建一个nodejs应用程序。
npm init or
npm init -Y
上述命令初始化并创建一个nodejs应用程序的默认值 该命令创建nodejs应用程序的所有默认值
如何在Nodejs中转换XML到JSON
有很多npm库可以用来解析xml并返回json格式。
使用xml2json npm库
xml2json 是一个npm库,用于解析xml文件的功能有限。
这个解析器并不解析那些有
- CData部分
- 评论
- 命名空间保留
- 属性
接下来,使用以下命令将xml2json 依赖关系安装到应用程序中
npm install xml2json --save
这将在package.json中添加依赖性,如下所示
{
"name": "Nodejs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"xml2json": "^0.12.0"
}
}
让我们写一段代码,将XML解析为JSON对象
让我们声明xml文件,内容如下
user.xml
12
john
admin
false
2000-10-01
下面是读取xml文件并转换为JSON的步骤
- 包括
xml2json模块,使用require关键字,返回一个对象 - 我们必须从文件系统中读取文件,所以
fs module是Nodejs的内置模块,必须使用 。require - 从
fs模块中读取带有readFile的文件到内存中。 readFile接受 , 和 函数。filepathencodingcallback- 回调函数被调用,并带有数据和错误。
- 这将以异步的方式读取文件数据,并将对象放入
data变量。 xml2json模块有 方法,读取 并返回 数据。toJsonxmlJSON
下面是一个将xml转换成json的异步例子parseXmlAsJsonAsync.js。
let xmlParser = require('xml2json');
let fs = require('fs');
fs.readFile('user.xml', 'utf8', function(err, data) {
if (err) {
console.error(err)
return
}
let jsonData=xmlParser.toJson(data);
console.log(jsonData);
});
执行parseXmlAsJsonAsync.js将xml文件内容返回到JSON字符串。这里是同步的版本,它按顺序运行每一行代码。
这有一个缺点,当我们有一个大的数据设置,如1000MB的文件大小时,请求必须等待更长的时间。
fs模块readFileSync ,该方法按顺序读取数据,并在返回数据给用户之前将其加载到内存中。
parseXmlAsJsonsync.js
let xmlParser = require('xml2json');
let fs = require('fs');
try {
const xmlData = fs.readFileSync('user.xml', 'utf8')
let jsonData=xmlParser.toJson(xmlData);
console.log(jsonData);
} catch (err) {
console.error(err)
}
快速xml解析器
fast-xml-parser是一个强大的XML内容操作库,具有许多其他功能。
它有许多功能
- 验证xml
- 将xml转换成/从javascript和JSOn中转换出来
- 处理大文件在性能方面很好
- 解析CData部分
- 支持默认的所有类型,包括布尔型
- 解析属性和注释
- 它提供了npm以及CLI用于
npm install fast-xml-parser
你可以使用npm install命令来安装package.json 。
{
"name": "Nodejs",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"fast-xml-parser": "^3.19.0",
}
}
下面是一个使用fast-xml-parser 的例子 它有parse 方法,接受以下参数
它有三个参数
- xml数据
- 选项 默认配置可以被传递
- true - 启用或禁用内部xml验证
let xmlParser = require('xml2json');
var parser = require('fast-xml-parser');
let fs = require('fs');
fs.readFile('user.xml', 'utf8', function(err, data) {
if (err) throw err;
var jsonData = parser.parse(data,null, true);
console.log(jsonData);
});
输出
{
users: {
user: {
id: 12,
username: 'john',
role: 'admin',
active: false,
create_date: '2000-10-01'
}
}
总结
总结一下,我们已经学会了使用npm库将xml转换为json的多种方法。xml2json 是功能有限的基本库,可用于简单的转换和较小尺寸的文件,而fast-xml-parser 库是一个强大的库,具有更多的功能。这可以用于验证和大尺寸文件的性能。