繁体   English   中英

我无法使用 node.js 读取 JSON 文件

[英]I can't read a JSON file with node.js

嗨,我在 Node.js 中得到了以下代码

fs.readFile(file, function(err, obj) {
    obj.data1.forEach(function(element) {
        console.log (element.key, element.key1);
    });
})

我正在尝试以以下 json 格式显示所有的键和值:

{
    "data1": {
        "key": "iohiohio",
        "key1": "jhuihuj"
    },
    "data2": {
        "key4": "hoih",
        "key5": "kjhi"
   }
}

所以我希望结果是这样的:

键1:jhuihuj,键4:hoih

并显示在 html/ejs 文件中。

问题是obj作为缓冲区或字符串从fs.readFile返回(如果提供了utf-8格式)。

为了将字符串或缓冲区转换为实际对象,您必须使用JSON.parse()方法。

下面是一段注释代码,可以帮助您逐步了解要做什么:

var fs = require("fs");
fs.readFile("./file.json",  "utf-8", function(err, obj) {
    // print your json file to the screen
    console.log(obj);

    // parse the obj string and convert it to an actual object
    obj = JSON.parse(obj);

    // print the properties of obj.data1 as "key : value"
    for (k in obj.data1) {
        console.log(k, ":", obj.data1[k]);
    }
})

控制台结果:

D:\workspace\projects\node>node server
{
    "data1": {
        "key": "iohiohio",
        "key1": "jhuihuj"
    },
    "data2": {
        "key4": "hoih",
        "key5": "kjhi"
   }
}
key : iohiohio
key1 : jhuihuj

将您的值放入数组中有什么意义? 这是多余的,因为它们中有一个对象。 您可以删除方括号,然后将其删除:

{
    "data1": {
        "key": "iohiohio",
        "key1": "jhuihuj"
    },
    "data2": {
        "key4": "hoih",
        "key5": "kjhi"
    }
}

然后,你会像这样循环它:

fs.readFile(file, function(err, obj) {
    for (var k in obj.data1) {
        console.log(k + ": " + obj.data1[k]);
    }
});

不过,那只会打印data1的键! 要打印所有内容,您应该使用:

fs.readFile(file, function(err, obj) {
    try {
        obj = JSON.parse(obj);
    } catch(e) {
        console.log("Error while parsing");
        return;
    }

    for (var k in obj) {
        for (var k2 in obj[k]) {
             console.log(k + " - " + k2 + ": " + obj[k][k2]);
        }
    }
});

// Result
// data1 - key: iohiohio
// data1 - key1: jhuihuj
// data2 - key4: hoih
// data2 - key5: kjhi

编辑:你应该解析obj 最好将它放在 try catch 块中,以防 JSON 错误且无法解析。

你也可以检查这个,你可以用require加载json:

var obj = require("./jsonfile");
for (var k in obj) {
    for (var k2 in obj[k]) {
         console.log(k + " - " + k2 + ": " + obj[k][k2]);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM