Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在NodeJS中循环通过JSON对象_Javascript_Json_Node.js - Fatal编程技术网

Javascript 无法在NodeJS中循环通过JSON对象

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

我有一个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
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');
    });
});