【问题标题】:Parse Json File in NodeJS displays unexpected results in Node在 NodeJS 中解析 Json 文件在 Node 中显示意外结果
【发布时间】:2015-03-06 08:39:32
【问题描述】:

我有下面的 nodejs 代码读取baseline.json 文件的内容并解析它。然后我尝试显示所有计算机 ID 和 LastReportTime。我看到一个奇怪的行为,它不会打印所有 ID 和 LastReportTime。此外,每次运行它的结果都不同。 json 对我来说很大,所以我上传到 Json Blob 上。

Nodejs 代码

var fs = require('fs');

try {
    var json = JSON.parse(fs.readFileSync('baseline.json'));
    for (var obj in json) {
        if (json.hasOwnProperty(obj)) {
            console.log(obj);
            console.log("\n \n");

            if (obj == "BESAPI") {

                for (var prop in json[obj]) {
                    console.log(prop);
                    if (prop == "Computer") {
                        // loop over Computer dataseries
                        for (var id in json[obj][prop]) {
                            console.log(prop + ':' + json[obj][prop][id].ID);
                            console.log(prop + ':' + json[obj][prop][id].LastReportTime);
                        }
                    }

                }

            }

        }
    }

} catch (err) {
    console.error(err);
}

原始 JSON

https://gist.github.com/anonymous/f27f75879e48c5387a03

【问题讨论】:

标签: javascript json node.js


【解决方案1】:

在您发布的数组中,LastReportTime 和 ID 是数组。

试试以下几行:

console.log(prop + ':' + json[obj][prop][id].ID[0]);
console.log(prop + ':' + json[obj][prop][id].LastReportTime[0]);

【讨论】:

  • 当我运行它时,它只打印 143 个 ID,但是 JSON 中总共有 177 个 ID。我不确定为什么它会忽略其余部分。
  • 这次我再次运行它,它打印了 146 个 ID ......你知道有什么问题吗?
  • 不知道,但所有 ID 都属于 BESAPIComputer 吗?
  • 是的,我正在使用 NodeJS 运行时在云平台上部署这个应用程序。我现在在我的本地 linux 机器上尝试了它,我可以检索所有 ID。太奇怪了。
  • @user3846091:如果这个答案没有解决问题,你不应该接受它。这会让未来的访客感到困惑。似乎根本问题不在于您发布的代码。您应该调查并发布您自己的答案或删除问题。但是现在它给人的印象是,如果将字符串与数组而不是第一个元素连接起来,JS 不会遍历所有行。
【解决方案2】:

如果你打印漂亮,你可以看到数据有两种形式,顶部是标准格式的数据余额,重复 177 次

{
    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"
                ]
            },
            {
                $: {
                    Resource: "api/computer/11736335"
                },
                LastReportTime: [
                    "Thu, 26 Feb 2015 14:54:41 +0000"
                ],
                ID: [
                    "11736335"
                ]
            },

我给她删了很多行,但它正常结束

            {
                $: {
                    Resource: "api/computer/5520740"
                },
                LastReportTime: [
                    "Thu, 12 Feb 2015 02:49:11 +0000"
                ],
                ID: [
                    "5520740"
                ]
            }
        ]
    }
}

使用 nodejs you can pretty print using

var pretty_print = require('js-object-pretty-print').pretty;


var parsed_data = JSON.parse(data_from_file);

console.log(pretty_print(parsed_data)); // good pretty print

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多