如何在Node.js中通过用户名从JSON数组获取对应数值?
问题分析与解决方法
你的核心问题有两个:一是JSON数据结构是数组而非对象,无法直接用键名访问;二是动态键访问的语法错误,acc.${username}不是合法的JavaScript写法。
方案1:适配现有数组结构获取值
你的JSON是由多个单键对象组成的数组,需要先遍历数组找到包含目标用户名的对象,再提取对应数值:
var data = fs.readFileSync('2FA.json'); var acc = JSON.parse(data); // 找到数组中包含目标用户名的对象 const targetUser = acc.find(item => Object.keys(item)[0] === username); if (targetUser) { // 用方括号语法获取动态键对应的数值 const userCode = targetUser[username]; console.log(userCode); } else { console.log("未找到对应用户的数值"); }
方案2:优化JSON结构(更高效推荐)
把JSON改成对象格式,直接用用户名作为键,这样访问效率更高,代码更简洁:
修改后的2FA.json:
{ "youssefnageeb": 927342, "youssefnageeb1": 310686, "youssefnageeb2": 105380, "youssefnageeb3": 431816, "youssefnageeb4": 484728 }
然后直接用方括号语法访问动态键:
var data = fs.readFileSync('2FA.json'); var acc = JSON.parse(data); // 动态键必须用方括号访问,不能用点语法 console.log(acc[username]);
额外注意事项
- 变量
loggedIn和username建议用let或const声明,避免全局变量污染; fs.readFileSync是同步读取,会阻塞事件循环,高并发场景建议改用异步的fs.readFile;res.render之后的代码仍会执行,若需要在渲染页面后停止后续逻辑,可添加return。
内容的提问来源于stack exchange,提问作者Youssef
相关产品推荐
相关产品推荐

