如何在Python中删除JSON文件内列表的指定元素及报错修复
解决JSON文件中列表字符串的元素删除问题
你的问题根源有两个:
- JSON里的
language值是字符串形式的列表,不是真正的JSON数组,所以json.load读取后,data["language"]是字符串,不是可直接操作的列表。 - 你的代码写法完全错误,
list(data["language"]['Spanish'])既不能正确转换列表,del的用法也不符合Python语法。
正确解决步骤
方案1:保留原字符串格式处理(不推荐,后续操作仍繁琐)
用ast.literal_eval把字符串形式的列表转成真正的Python列表,删除元素后再转回字符串:
import json import ast # 读取JSON文件 with open("example.json", "r") as jsonFile: data = json.load(jsonFile) # 将字符串列表转为可操作的Python列表 lang_list = ast.literal_eval(data["language"]) # 移除目标元素 if 'Spanish' in lang_list: lang_list.remove('Spanish') # 转回字符串格式(保持原JSON结构) data["language"] = str(lang_list) # 写回JSON文件 with open("example.json", "w") as jsonFile: json.dump(data, jsonFile)
方案2:改为标准JSON数组(推荐,后续操作更规范)
更合理的做法是把JSON里的language改成真正的数组(去掉外层引号,直接用方括号定义列表),这样读取后直接就是Python列表:
修改后的JSON文件内容:
{"language": ["English", "French", "Spanish"], "bank": 50}
之后用以下代码操作:
import json with open("example.json", "r") as jsonFile: data = json.load(jsonFile) # 直接操作列表删除元素 if 'Spanish' in data["language"]: data["language"].remove('Spanish') with open("example.json", "w") as jsonFile: json.dump(data, jsonFile)
补充提示
ast.literal_eval比eval更安全,专门用于解析字符串形式的Python字面量(列表、字典等)。- 加入
if 'Spanish' in ...的判断,可避免元素不存在时抛出异常。
内容的提问来源于stack exchange,提问作者BatteTarte
相关产品推荐
相关产品推荐

