检查JSON对象中是否存在值

时间:2015-07-07 16:07:22

标签: javascript json node.js

我正在学习NodeJS。我正在使用JSON对象来检查用户是否在场。

这是我的JSON(users.json):

{
    "users": [{
        "fname": "Robert",
        "lname": "Downey Jr.",
        "password": "ironman"
    }, {
        "fname": "Chris",
        "lname": "Evans",
        "password": "cap"
    }, {
        "fname": "Chris",
        "lname": "Hemsworth",
        "password": "thor"
    }, {
        "fname": "Jeremy",
        "lname": "Renner",
        "password": "hawk"
    }]
}

现在我想传递一个条目的fname值,看它是否存在于JSON对象中。

这就是我正在做的事情:

var file = JSON.parse(fs.readFileSync('users.json', 'utf8'));
for (eachUser in file.users) {
            console.log(eachUser.fname);
        }

但是我没有得到fname值而只是undefined。我不知道自己做错了什么。

还有一种方法可以在不必迭代JSON对象的情况下查找值是否存在?

3 个答案:

答案 0 :(得分:0)

if ( typeof file !== 'undefined' && file )
{
   //do stuff if file is defined and not null
}

答案 1 :(得分:0)

问题是eachUser被设置为数组中的每个索引 - 而不是该索引处的对象。如果您只记录eachUser,则会看到

0
1
2
3

相反,首先拉出对象,然后获取其fname

for (index in file.users) {
  console.log(file.users[index].fname)
}

这是demo

如果要在不迭代数组的情况下进行此查找,可以将数据重新整形为以fname为键的对象,如下所示:

{
  "Robert": {
    "fname": "Robert",
    "lname": "Downey Jr.",
    "password": "ironman"
  },
  "Chris": {
    "fname": "Chris",
    "lname": "Evans",
    "password": "cap"
  },
  "Jeremy": {
    "fname": "Jeremy",
    "lname": "Renner",
    "password": "hawk"
  }
}

当然,要么您将无法存储任何重复的名字,要么您需要制作值数组。

答案 2 :(得分:-1)

您的迭代声明中存在问题:

for (eachUser in file.users)

可以使用this post中描述的foreach语句,例如:

file.users.forEach(function(user) {
    console.log(user.fname);
});

干杯