Python迭代JSON如何排除bool/float/int/NoneType并简化代码
问题修复与代码简化方案
报错原因
- 缩进错误:内层遍历
for value in json[element]没有缩进在if判断分支内,无论类型判断结果如何都会执行,遇到None等不可迭代的基础类型直接触发报错 - 类型判断对象错误:当前判断的是JSON字典的键(element)的类型,而非你需要遍历的字典值(
json[element])的类型,值为None时不会被过滤 - 类型判断写法冗余:多条件拼接的type判断不符合Python惯用写法,可读性差
- 变量名风险:用
json作为变量名会和Python标准库的json模块重名,容易引发后续调用异常
修复后简化代码
我们直接用items()同时获取键和值,用isinstance批量判断类型,用continue提前跳过不需要处理的类型,逻辑更清晰:
# parsed_json是你读取JSON文件后解析得到的Python字典 for key, value in parsed_json.items(): # 跳过bool、int、float、None四类不需要遍历的类型 if isinstance(value, (bool, int, float, type(None))): continue # 遍历剩余可迭代类型的值 for val in value: print(val)
补充说明
Python中bool是int的子类,isinstance(True, int)会返回True,如果你后续需要调整过滤规则,注意bool类型的优先级即可。如果你的JSON解析后可能存在列表顶层结构,可以额外加一层类型判断处理列表场景。
内容的提问来源于stack exchange,提问作者SameX
相关产品推荐
相关产品推荐

