javascript - 如何遍历未确定的 JSON 密钥并用它发送消息?
问题描述
所以,我做了一个命令,记录你正在寻找闪亮的神奇宝贝,你有多少,你花了/正在用多少鸡蛋来获得闪亮的,它工作正常。我的问题是有些人忘记了他们在该存储中注册的神奇宝贝,因此我希望能够发送一条包含他们在存储中注册的所有神奇宝贝的消息,如下所示:
You have registered the following pokémon:
(All the pokémon you registered)
但是,我不知道如何遍历用户 ID 内的键。这是我的 json 文件的外观:
{
"User's ID": {
"Pokémon": {
"encounters": value,
"shinies": value
},
"Pokémon": {
"encounters": value,
"shinies": value
}
}
}
我试过这样循环:
const path = require('path');
const fs = require('fs');
const shiniesDataPath = path.resolve(__dirname, './Storage/shiniesData.json');
function loadShiniesData() {
return JSON.parse(fs.readFileSync(shiniesDataPath).toString());
}
const shiniesData = loadShiniesData();
var trainer = shiniesData[message.author.id];
if (args[0] === 'all') {
for (var trainer in shiniesData) {
message.channel.send([trainer])
}
return;
}
但它只循环通过ID。
解决方案
JSON 对象不应该有多个相同的键,而是您可以做的是将Pokémon
键分配给array
,如下所示:
{
"User's ID": {
"Pokémon": [
{
"encounters": value,
"shinies": value
},
{
"encounters": value,
"shinies": value
}
]
}
}
为了访问密钥,假设上面的对象被分配给 variable obj
。为了访问对象中的键,您可以执行
Object.keys(obj).forEach((key) => {
// Do something
})
但是,如果您像我一样切换到数组,我想您会想做这样的事情:
obj['Pokémon'].forEach((item) => {
// Do something
})
whereobj['Pokémon']
返回映射到键“Pokémon”.foreach
的数组,并遍历数组中的每个项目,您可以通过变量在匿名函数(由大括号括起来)中访问它item
。
推荐阅读
- asp.net - Azure AD 不记名令牌 - 获取用户标识符
- phpstorm - 使用代码编辑器更改文件时出现错误的意外标记:“”(第 1 列,代码点 U+0000)
- amazon-web-services - AWS Lambda 将图像写入 S3 访问被拒绝
- python - Sklearn 多个特征(多个自变量,结果 y 取决于)
- javascript - 如何在不分页的情况下抓取下一页
- excel - 使用 vlookup 参考使用 VBA 粘贴单元格颜色
- javascript - 应该使用新的数据库信息更新页面的 ajax 函数正在发挥应有的作用
- javascript - 循环隐藏除一个以外的所有 div
- javascript - 用 JavaScript 绘制流数据图表
- javascript - Javascript,如何显示下一个日期