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

您好,我得到了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文件中。

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

为了将string或缓冲区转换为实际的对象您必须使用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 

编辑:你应该parsingobj 。 最好把它放在try catch块中,以防JSON错误而无法parsing。

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

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