您好我在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文件中。
答案 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]);
}
}