Nodejs从JSON获取密钥

时间:2017-05-11 22:17:50

标签: javascript json node.js

我正在读取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 
}, { ...
}]

4 个答案:

答案 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)

首先遍历数组[]然后遍历对象{}

&#13;
&#13;
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;
&#13;
&#13;