我试图访问一个变量,其中USER_ID
是动态的:
jsonParsed.users.[USER_ID].userID;
字符串USER_ID
将是一个基于discord用户ID的大数字。user.id与json文件中的id正确匹配。
function scrumJoin(user) {
let USER_ID = user.id; //Example: user.id = 147477029364979999
let content = fs.readFileSync('scrumUsers.json');
let jsonParsed = JSON.parse(content);
console.log('JSON parsed user ID: \n' + jsonParsed.users.[USER_ID].userID); //point of failure
}
型
JSON文件:
{
"users": [
{
"1111111111111111": [{
"userID": 1111111111111111,
"phase": 1
}]
},
{
"147477029364979999": [{
"userID": 147477029364979999,
"phase": 1
}]
}
]
}
型
我希望USER_ID
能够根据访问文件的用户动态更改。我知道这可能是一个非常简单的解决方案,但我正在努力弄清楚如何在谷歌中使用它,我很确定GPT是不正确的。
聊天GPT告诉我将其格式设置为:
jsonParsed.users[USER_ID].userID
型
但我很确定它指定了我试图访问的部分在数组中的位置,而不是部分本身的名称。
2条答案
按热度按时间fdbelqdn1#
由于您的数据结构,您使它变得比必要的更复杂。但是,这里是如何做到这一点。
对于数据结构:
字符串
为了提取具有给定用户ID的用户,您必须执行以下操作:
型
我已经写了上面的清晰度。代码尽可能简单,以便尽可能容易理解。你可以用更现代的函数式风格来写:
型
这是更紧凑,但也有很多更多的打开。然而,它的意思与上面的代码完全相同,在数组中找到以USER_ID作为键的对象。
更好的数据结构。
更好的数据结构是简单地使用对象而不是数组:
型
这样代码就变成了:
型
就是这样,没有循环,没有过滤或查找。直接访问即可。
你甚至可以通过删除 Package 用户对象的数组来进一步改进它:
型
有了这个数据结构,你的代码就简单了:
型
t30tvxxf2#
更改了我的json文件的格式,不再包含不必要的数组:
字符串
能够使用以下代码基于动态
USER_ID
检索正确的数据:型