在Replit中删除JSON文件内嵌列表元素时出现错误如何解决
问题根因与修复方案
出现JSON格式错误的核心原因是:你使用r+模式打开文件写入时,修改后生成的新JSON内容长度短于原文件的内容长度,旧文件末尾残留的冗余内容没有被清除,最终拼接成了结构不合法的JSON内容,导致解析报错。
另外你代码中把加载得到的JSON数据和文件对象使用了相同的变量名jsonfile,容易引发逻辑混淆,建议调整变量名区分。
修复代码
最简便的解决方案是将第二次打开文件的模式从r+改为w,w模式会自动清空原文件所有内容后写入新数据,不会残留旧内容:
import json # 读取原JSON文件内容,用独立变量存储解析后的数据 with open("main.json","r") as json_file: json_data = json.load(json_file) key = "0" index = int(input("请输入要删除的索引: ")) if key in json_data: del json_data[key][index] # 用w模式覆盖写入新的JSON内容 with open("main.json","w") as f: json.dump(json_data, f, indent=3)
如果你要保留r+模式,也可以在写入完成后调用truncate()方法手动截断文件多余内容:
# 仅替换第二次文件操作的代码段 with open("main.json","r+") as f: if key in json_data: del json_data[key][index] # 把文件指针移到开头位置 f.seek(0) json.dump(json_data,f,indent=3) # 截断指针位置之后的所有冗余内容 f.truncate()
内容的提问来源于stack exchange,提问作者DevER-M
相关产品推荐
相关产品推荐

