2015-07-07 2 views
0

Я изучаю NodeJS. Я использую объект JSON для проверки наличия пользователя.Проверьте, существует ли значение в объекте 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

проблема в том, что eachUser получает значение t o каждый индекс в массиве - не объект в этом индексе. При входе в систему только 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" 
    } 
} 

Конечно, тогда либо вы не сможете сохранить какие-либо повторяющиеся имена, или вам нужно сделать массивы значений.

+0

Yup! это работает. Но это можно сделать без цикла. Просто прошу выяснить, есть ли другие способы сделать это. – v1shnu

+0

Получил! Благодарю. – v1shnu

-1

У вас есть вопрос в вашей итерации высказывании:

for (eachUser in file.users) 

Вы можете использовать один в foreach заявлении, описанном в this post, такие как:

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

Приветствиях

+0

Можно ли пересмотреть свой ответ? Я не понимаю, где это относится. – v1shnu

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

Или короче: 'if (file! = Null)'. –

+0

Я хочу проверить, существует ли в объекте JSON значение, такое как «Крис», «Роберт». Не проверять, является ли файл нулевым или нет. – v1shnu

+0

Прежде чем они могут существовать, файл должен существовать. Тогда вы можете в нее вписаться. – NiVeR

Смежные вопросы