问题描述
有 wallet
和 bank
的数量。我已将整个内容上传到 Gitlab,因此 JSON 将不可读。
由于我升级了与 Red 实例一起运行的机器人,因此我获得了 2 个用户的 KeyError
,但也仅适用于特定查询。例如,我有以下命令:
@commands.command()
async def wallet(self,ctx,user: discord.Member = None):
"""Check the wallet amount"""
if user is None:
with open(f'{bundled_data_path(self)}/mainbank.json','r') as f:
data = json.load(f)
user = ctx.author
users = await get_bank_data()
wallet_amt = users[str(user.id)]["wallet"]
await ctx.send(f "**You have {wallet_amt} coins in your wallet.**")
但是,如果我现在想查询 ["bank"]
的值,我会为更新前存储在 JSON 中的用户获得 KeyError: ' bank'
,这不适用于 wallet
.我对 JSON 还是比较陌生,但是否可以从 JSON 中删除数据或通过命令添加密钥?
也许以下定义也有帮助:
async def open_account(user):
users = await get_bank_data()
if str(user.id) in users:
return False
else:
users[str(user.id)] = {}
users[str(user.id)]["wallet"] = 0 # Goes in one command
users[str(user.id)]["bank"] = 0 # Does not work
with open('data/mainbank.json','w') as f:
json.dump(users,f)
return True
我的方法是:
也许这里有人可以告诉我我的方法是否是将整个事物组成一个命令的正确方法,例如从 JSON 中删除 (user.id)
。
解决方法
根据我的经验,JSON 密钥错误通常意味着两件事:
- 密钥不存在
- 在当前嵌套中找不到密钥
因为 JSON 通常是嵌套的,所以您需要处于正确的级别来检索值。
检查这两件事;您可能不需要更改现有数据。
回答您的 JSON 相关内容:
How to add a key-value to JSON data retrieved from a file with Python?
Delete an element in a JSON object