我正在读取nodejs中的json文件,并希望在使用它之前在json对象中找到一个特定的键:
fs.readFile('./output.json', 'utf8', function(err, data) {
if (err) throw err;
console.log(Object.keys(data));
});
问题是,它返回一个数字数组作为字符串:
[ '0',
'1',
'2',
'3',
'4'
... ]
当我的json文件有这样的文本时。为什么会这样?
[{
"id": "vdhbsasqzqnbx2od",
"message": "On Sun, Jan 1, 2012 at 8:17 AM, Alan Stern <ste...@rowland.harvard.edu> wrote:As Linus pointed out, the real problem here
}, { ...
}]
答案 0 :(得分:2)
在我回答为什么你得到['0','1'等]之前,让我们看看你的data
是什么样的。 fs.readFile()
不会给你一个对象。它也不会给你一个字符串。 data
是nodejs Buffer。
现在,当你有一个缓冲区,并在其上运行Object.keys()
时,它会返回凹凸(显然是0, 1, 2, etc
)。
因此,要解决您的问题,您需要读取数据,将Buffer转换为有效的JSON。完成后,您的对象基本上就是一个对象数组。现在,您可以对对象数组执行任何操作。例如,如果您想要获取所有消息,可以使用Array.prototype.map
。看看下面的例子:
fs.readFile('./output.json', (err, data) => {
if (err) throw err;
// This is very important! Whenever you parse a JSON, you have to use try/catch
try {
let myArray = JSON.parse(data);
console.log(myArray.map(item => item.message);
} catch (exc) {
console.log('Invalid json:', exc);
}
});
答案 1 :(得分:0)
首先,您需要对数据运行JSON.parse()。然后你可以遍历它并访问各种属性,如id和message:
fs.readFile('./output.json', 'utf8', function(err, data) {
if (err) throw err;
var json = JSON.parse(data);
json.forEach(function(arrayItem) {
console.log(arrayItem.message);
});
});
答案 2 :(得分:0)
变量data
是一个缓冲区,所以当你将它传递给Object.keys
时,它会返回字符串字符的键(0,1,2,3,...)。
您希望先使用JSON.parse
解析数据,然后将生成的对象传递给Object.keys
:
fs.readFile('./output.json', 'utf8', function(err, data) {
if (err) throw err;
console.log(Object.keys(JSON.parse(data)));
});
修改:已更改&#39;字符串&#39;在评论中指出了“缓冲区”。
答案 3 :(得分:0)
首先遍历数组[]
然后遍历对象{}
。
var obj = [{"id":"abc","message":"this is a message"},{"id":"def","message":"another message"}];
for(var i = 0; i < obj.length; i++){
for(key in obj[i]){
if(obj[i][key] == "abc"){
return console.log(key);
}
}
}
&#13;