discord.py 如何一次性为所有用户添加新的JSON键
解决Discord机器人JSON用户数据添加新键的问题
首先得指出你代码里的核心问题:当用户已存在于JSON文件中时,你只把house这个单独的布尔值False写入了文件,这直接破坏了整个JSON的结构,自然达不到添加新键的效果。下面是修复后的方案:
修复后的open_account函数
import json async def open_account(user): users = await get_bank_data() user_id = str(user.id) if user_id in users: # 先检查用户是否已有House键,避免重复赋值 if "House" not in users[user_id]: users[user_id]["House"] = False # 必须把完整的users字典写入文件,而非单个值 with open("main.json", 'w') as f: json.dump(users, f, indent=4) # indent让JSON格式更易读 return False else: users[user_id] = { "wallet": 0, "bank": 0, "House": False } with open("main.json", 'w') as f: json.dump(users, f, indent=4) return True
额外:批量为所有现有用户添加House键
如果你想一次性给所有已存在的用户都补上House: False(不用等用户触发open_account),可以单独写个处理函数:
async def batch_add_house_key(): users = await get_bank_data() has_update = False for uid in users: if "House" not in users[uid]: users[uid]["House"] = False has_update = True if has_update: with open("main.json", 'w') as f: json.dump(users, f, indent=4) print("已为所有用户添加House键") else: print("所有用户都已拥有House键,无需更新")
错误原因拆解
你之前用f.write(json.dumps(house))的操作,相当于把单个布尔值false覆盖了整个JSON文件,导致后续get_bank_data读取时根本无法得到正确的用户字典结构。记住:操作JSON用户数据时,始终要基于完整的users字典进行修改,最后再把整个字典写入文件。
内容的提问来源于stack exchange,提问作者Ali FGT
相关产品推荐
相关产品推荐

