如何修复 JSON 中的键错误或从中删除条目?
How can I fix a key error in a JSON or delete an entry out of it?
我有一个经济系统,在这个系统中,各种东西都存储在 JSON。
有 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
我的方法是 be/were:
- 尝试使用
.remove(TheUserID)
- 这是删除用户的全部信息
del
JSON 的东西
- 我也阅读了一些不同的帖子,但我不确定它们是否有效:1 &
也许这里有人可以告诉我我的方法是否是将整个事情形成一个命令的正确方法,例如从 JSON.[=23= 中删除 (user.id)
]
根据我的经验,JSON 键错误通常意味着两件事:
- 密钥不存在
- 在当前巢中找不到钥匙
因为 JSON 通常是嵌套的,所以您需要在正确的级别上才能检索值。
检查这两件事;您可能不需要更改现有数据。
回答你的JSON相关问题:
How to add a key-value to JSON data retrieved from a file with Python?
我有一个经济系统,在这个系统中,各种东西都存储在 JSON。
有 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
我的方法是 be/were:
- 尝试使用
.remove(TheUserID)
- 这是删除用户的全部信息 del
JSON 的东西
- 我也阅读了一些不同的帖子,但我不确定它们是否有效:1 &
也许这里有人可以告诉我我的方法是否是将整个事情形成一个命令的正确方法,例如从 JSON.[=23= 中删除 (user.id)
]
根据我的经验,JSON 键错误通常意味着两件事:
- 密钥不存在
- 在当前巢中找不到钥匙
因为 JSON 通常是嵌套的,所以您需要在正确的级别上才能检索值。
检查这两件事;您可能不需要更改现有数据。
回答你的JSON相关问题:
How to add a key-value to JSON data retrieved from a file with Python?