如何修复 JSON 中的关键错误或从中删除条目?

问题描述

我有一个经济系统,其中各种东西都存储在 JSON 中。

walletbank数量。我已将整个内容上传到 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

我的方法是:

  • 尝试使用 .remove(TheUserID) - 这是删除用户的全部信息
  • del JSON 中的东西
  • 我也阅读了一些不同的帖子,但我不确定它们是否有效:1 & 2

也许这里有人可以告诉我我的方法是否是将整个事物组成一个命令的正确方法,例如从 JSON 中删除 (user.id)

解决方法

根据我的经验,JSON 密钥错误通常意味着两件事:

  1. 密钥不存在
  2. 在当前嵌套中找不到密钥

因为 JSON 通常是嵌套的,所以您需要处于正确的级别来检索值。
检查这两件事;您可能不需要更改现有数据。

回答您的 JSON 相关内容:

How to add a key-value to JSON data retrieved from a file with Python?
Delete an element in a JSON object