Tkinter密码管理器保存时触发JSONDecodeError问题求助
解决方案
1. 修复损坏的data.json文件
报错核心原因是data.json文件的JSON格式不规范(属性名未用双引号包裹),大概率是之前代码错误写入、手动修改或文件意外损坏导致。
- 打开
data.json,检查第6行附近内容,确保所有键名用双引号包裹,删除格式错误的内容; - 若文件损坏严重,直接删除该文件,后续代码会自动创建符合规范的新文件。
2. 修正代码中的关键错误
(1)密码赋值错误
save函数中new_data字典的password值错误使用了邮箱变量get_mail,应改为密码输入框的值get_pass:
new_data={ get_web: { "email": get_mail, "password": get_pass # 此处从get_mail改为get_pass } }
(2)输入校验逻辑错误
原代码的非空判断逻辑存在漏洞,修改为简洁且正确的判断方式:
if get_web and get_mail and get_pass: # 非空字符串直接作为布尔值判断 # 原有保存逻辑 else: messagebox.showinfo(title="Error", message="不要留空任何输入框")
(3)处理文件不存在的情况
首次运行或删除data.json后,原代码读取文件会报错,添加异常处理逻辑:
if is_ok: try: with open("data.json","r") as data_file: data=json.load(data_file) except FileNotFoundError: data = {} # 文件不存在时初始化空字典 data.update(new_data) with open("data.json", "w") as data_file: json.dump(data, data_file, indent=4) webinput.delete(0,END) passinput.delete(0,END)
内容的提问来源于stack exchange,提问作者Dannyrayz
相关产品推荐
相关产品推荐

