Javascript 无法在NodeJS中循环通过JSON对象
我有一个NODEJS程序,它使用xml2js将XML文件转换为JSON并对其进行解析。然后,我尝试循环通过json对象并显示ID,每个对象的LastReportTime,但我得到的输出表示未定义 输出Javascript 无法在NodeJS中循环通过JSON对象,javascript,json,node.js,Javascript,Json,Node.js,我有一个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 Compute
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
NodeJS
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后)
XML
2015年2月26日星期四14:54:41+0000
2431038
2015年2月26日星期四14:45:18+0000
16710075
2015年2月26日星期四14:50:52+0000
3415985
您似乎没有迭代计算机阵列。尝试更改内部循环,如下所示:
for (var prop in data[obj]) {
console.log(prop);
if (prop == "Computer") {
for( var cmp in data[obj][prop] ) {
console.log(prop + ':' + cmp.ID[0]);
console.log(prop + ':' + cmp.LastReportTime[0]);
}
}
}
Update根据您的JSON向ID和LastReportTime添加了数组符号考虑到您的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');
});
您还缺少一个循环,因为计算机属性是数组的数组:
if (obj == "BESAPI") {
for (var prop in data[obj]) {
console.log(prop);
if (prop == "Computer") {
// loop over Computer dataseries
for(var id in data[obj][prop]) {
console.log(prop + ':' + data[obj][prop][id].ID);
console.log(prop + ':' + data[obj][prop][id].LastReportTime);
}
}
}
在读取JSON元素时,我们需要注意您的情况下的索引和数组
for(var i=0; i <data.BESAPI.Computer.length; i++ ){
var computerData = data.BESAPI.Computer[i];
alert(computerData.LastReportTime);
}
for(var i=0;i问题是,为什么您没有定义
对象数据[obj][prop]是数组而不是对象
所以,再次获取你错过的数组中的每个对象,
只是修改了最里面的“如果”块
谢谢,但我收到以下错误2015-02-26T21:08:32.07-0500[App/0]错误类型错误:无法读取未定义的属性“0”。您的问题已得到回答?Y bounty仍然?
if (obj == "BESAPI") {
for (var prop in data[obj]) {
console.log(prop);
if (prop == "Computer") {
// loop over Computer dataseries
for(var id in data[obj][prop]) {
console.log(prop + ':' + data[obj][prop][id].ID);
console.log(prop + ':' + data[obj][prop][id].LastReportTime);
}
}
}
for(var i=0; i <data.BESAPI.Computer.length; i++ ){
var computerData = data.BESAPI.Computer[i];
alert(computerData.LastReportTime);
}
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") {
for (var propKeys in prop) {
if(data[obj] && data[obj][prop] && data[obj][prop][0]) {
console.log(prop, data[obj][prop][0].ID);
console.log(prop, data[obj][prop][0].LastReportTime);
}
}
}
}
}
}
}
console.log('Done');
});
});