移除JSON文件Stores列表内Company键值对时遇TypeError错误求助
问题分析与解决方法
先修复无效的JSON
你的目标JSON存在语法错误:第二个Store字典里的"Total_Employees"没有完整的键值对(缺少冒号和对应值),这会导致json.load()直接解析失败。先修正为有效的JSON:
{ "Company": "Apple", "Stores": [ {"Company" : "Apple", "Location" : "-", "Sales": "-", "Total_Employees": "-" }, {"Company" : "Apple", "Location" : "-", "Sales": "-", "Total_Employees": "-" }, {"Company" : "Apple", "Location" : "-", "Sales": "-", "Total_Employees": "-" } ] }
原代码错误原因
你遇到的TypeError: 'int' object is not iterable,本质是代码逻辑完全偏离需求:
- 遍历
jsonFile.items()时,第一个键值对是"Company": "Apple",此时v是字符串,执行for key in v会逐个遍历字符串的字符,这完全不是你要处理的对象。 - 后续
testJson的赋值逻辑混乱,没有针对Stores列表内的字典做处理,反而错误覆盖变量,最终导致非可迭代对象被强制遍历。
正确实现代码
要移除Stores列表内所有字典的"Company"键值对,直接定位到目标列表并逐个处理字典即可:
import json # 加载JSON文件 with open("stores.json", 'r') as jf: data = json.load(jf) # 遍历Stores列表中的每个字典,安全删除"Company"键 for store in data["Stores"]: # 使用pop避免KeyError:如果字典没有"Company"键则不执行删除操作 store.pop("Company", None) # 可选:将处理后的数据写入新文件,保留原文件 with open("cleaned_stores.json", 'w') as jf: json.dump(data, jf, indent=4) print("处理完成,已移除Stores内所有字典的Company键值对")
代码说明
- 直接用
data["Stores"]定位到需要处理的列表,避免无意义的全JSON遍历。 dict.pop(key, None)是安全删除键的方式:键存在则删除并返回对应值,不存在则返回None,不会抛出KeyError。- 最后写入新文件的操作可保留原始数据不受修改,也可直接覆盖原文件(修改写入的文件名即可)。
内容的提问来源于stack exchange,提问作者kingmic
相关产品推荐
相关产品推荐

