我有一个 NODEJS 程序,它使用 xml2js 将 XML 文件转换为 JSON 并解析它。然后我尝试遍历 json 对象并显示每个对象的 ID、LastReportTime,但我得到的输出显示未定义
输出
2015-02-26T18:45:35.34-0500 [App/0] OUT BESAPI
2015-02-26T18:45:35.34-0500 [App/0] OUT Computer
2015-02-26T18:45:35.34-0500 [App/0] OUT Computer:undefined
2015-02-26T18:45:35.34-0500 [App/0] OUT Done
Node
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile('myfile.xml', function(err, data) {
parser.parseString(data, function (err, result) {
var jsoniem = JSON.stringify(result);
console.log(jsoniem);
var data = JSON.parse(jsoniem);
for (var obj in data) {
if (data.hasOwnProperty(obj)) {
console.log(obj);
console.log("\n \n");
if (obj == "BESAPI") {
for (var prop in data[obj]) {
console.log(prop);
if (prop == "Computer") {
console.log(prop + ':' + data[obj][prop].ID);
console.log(prop + ':' + data[obj][prop].LastReportTime);
}
}
}
}
}
console.log('Done');
});
Json(程序从XML转JSON后)
{
"BESAPI": {
"$": {
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"xsi:noNamespaceSchemaLocation": "BESAPI.xsd"
},
"Computer": [
{
"$": {
"Resource": "api/computer/2431038"
},
"LastReportTime": [
"Thu, 26 Feb 2015 14:54:41 +0000"
],
"ID": [
"2431038"
]
},
{
"$": {
"Resource": "api/computer/16710075"
},
"LastReportTime": [
"Thu, 26 Feb 2015 14:45:18 +0000"
],
"ID": [
"16710075"
]
},
{
"$": {
"Resource": "api/computer/3415985"
},
"LastReportTime": [
"Thu, 26 Feb 2015 14:50:52 +0000"
],
"ID": [
"3415985"
]
}
]
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<BESAPI xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BESAPI.xsd">
<Computer Resource="api/computer/2431038">
<LastReportTime>Thu, 26 Feb 2015 14:54:41 +0000</LastReportTime>
<ID>2431038</ID>
</Computer>
<Computer Resource="api/computer/16710075">
<LastReportTime>Thu, 26 Feb 2015 14:45:18 +0000</LastReportTime>
<ID>16710075</ID>
</Computer>
<Computer Resource="api/computer/3415985">
<LastReportTime>Thu, 26 Feb 2015 14:50:52 +0000</LastReportTime>
<ID>3415985</ID>
</Computer>
</BESAPI>
最佳答案
考虑到您的 JSON 示例遍历对象似乎无关紧要。也不需要先对数据进行字符串化,然后再解析字符串。
fs.readFile('myfile.xml', function(err, data) {
parser.parseString(data, function (err, result) {
var jsoniem = JSON.stringify(result);
console.log(jsoniem);
result.BESAPI.Computer.forEach(function (el) {
// Output arrays
console.log(el.ID);
console.log(el.LastReportTime);
// Get first elements
console.log(el.ID[0]);
console.log(el.LastReportTime[0]);
});
}
console.log('Done');
});
关于javascript - 无法循环遍历 NodeJS 中的 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28755072/