我无法用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]); } }