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

时间:2017-01-13 09:42:13

标签: javascript node.js express ejs

您好我在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"
   }
}

所以我希望结果如下:

  

key1:jhuihuj,key4:hoih

并显示在html / ejs文件中。

2 个答案:

答案 0 :(得分:2)

问题是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

答案 1 :(得分:0)

在数组中包含值是什么意思?这是多余的,因为你有一个对象。您可以删除方括号,只需这样:

{
    "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。如果JSON错误且无法解析,最好将它放在try catch块中。

您还可以查看this,您可以使用require加载json:

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