我正在学习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对象的情况下查找值是否存在?
答案 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);
});
干杯