![](/img/trans.png)
[英]How can I read .dat file in node.js and convert to human-readable text/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.