无法在 NodeJS 中循环 JSON 对象

use*_*091 3 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 Computer:undefined
2015-02-26T18:45:35.34-0500 [App/0]   OUT Done
Run Code Online (Sandbox Code Playgroud)

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');
    });
Run Code Online (Sandbox Code Playgroud)

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"
                ]
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

zay*_*tro 5

考虑到您的 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');
});
Run Code Online (Sandbox Code Playgroud)