【问题标题】:JSON gets replacedJSON 被替换
【发布时间】:2021-10-09 08:46:33
【问题描述】:

您好,我有一个问题,我可以将数据保存在我的 JSON 中,当我键入命令时,它会替换它,您可以帮助我吗?请

我的代码:

async def get_bank_data(): 
    with open("assets/bdd/mainbank.json", "r+") as f:
        users = json.load(f)

    return users

async def open_account(user, guild):
    users = await get_bank_data()

    users[str(guild.id)] = {}

    if str(user.id) in users[str(guild.id)]:
        return False
    else:
        users[str(guild.id)][str(user.id)] = {}
        users[str(guild.id)][str(user.id)]["cash"] = 5000
        users[str(guild.id)][str(user.id)]["bank"] = 10000

    with open ("assets/bdd/mainbank.json", "w") as f:
        json.dump(users,f)

    return True

@client.command(pass_content=True)
async def create_account(ctx, user:discord.Member = None):
    if user == None:
      user = ctx.author
    else:
      user = user

    guild = ctx.guild

    await open_account(user, guild)

    await ctx.send("Your account has been created !")

我的 json :

谢谢

【问题讨论】:

  • 如果您可以将文本作为实际文本发布,它总是会更好。尽量不要将文本作为图像发布。此外,您应该提供更清晰的步骤来重现您面临的问题。您还应该更准确地描述您的问题。例如,替换什么? “我输入了我的命令”是什么意思?例如当调用函数 open_account 时,它会覆盖我的 JSON 文件内容,我该如何让它不会替换我的 JSON 文件中的内容?

标签: python json python-2.7 discord discord.py


【解决方案1】:

当你这样做时:

with open("assets/bdd/mainbank.json", "w") as f:
    json.dump(users,f)

你用新内容覆盖f。相反,您想读取现有的 json,使用新值对其进行更新,然后将其写回文件,如下所示:

with open("assets/bdd/mainbank.json", "r+") as f:
    data = json.loads(f.read())
    data.update(users)
    json.dump(data,f)

编辑: 我错过了您已经拥有get_bank_data 功能。我相信问题是每次您想添加用户时都会擦除整个公会银行: users[str(guild.id)] = {} 您应该先检查 guild.id 是否不存在:

if str(guild.id) not in users.keys():
    users[str(guild.id)] = {}

【讨论】:

  • {}{"871682135474458664": {"560849136899850261": {"cash": 5000, "bank": 10000}}}有错误
  • 不要使用我建议的第一个更改,只使用最后一个。
  • 看起来你已经删除了 json 并试图读取一个空文件,如果文件完全为空,users = json.load(f) 将抛出异常。作为快速修复,只需手动将 {} 添加到空 json。
  • 我试过你的方法和其他方法,但仍然不行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2015-10-31
  • 1970-01-01
  • 2014-08-15
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多