嵌套JSON解析报错:存在对应key却提示NoneType不可迭代
问题分析与解决
问题原因
你遇到的TypeError: 'NoneType' object is not iterable,本质是某个Hashtag对象里的EndsIn30字段值为null(对应Python的None),但在线工具自动生成的from_dict方法直接尝试对这个None做列表推导式迭代,导致报错。
虽然整体JSON结构里存在Hashtags和EndsIn30这些key,但嵌套层级里的个别EndsIn30字段是空值,而自动生成的代码没有处理这种空值场景。
解决方案
修改自动生成的Hashtag.from_dict方法中处理EndsIn30的代码,提前处理空值情况:
方法1:添加None判断
class Hashtag: # 其他字段定义与方法... @staticmethod def from_dict(obj: Any) -> 'Hashtag': # 其他字段解析逻辑... _EndsIn30 = [] ends_in_30_data = obj.get("EndsIn30") if ends_in_30_data is not None: _EndsIn30 = [EndsIn30.from_dict(y) for y in ends_in_30_data] # 其他字段解析逻辑... return Hashtag(..., EndsIn30=_EndsIn30, ...)
方法2:使用get方法的默认值
直接给obj.get传入默认空列表,避免返回None:
class Hashtag: # 其他字段定义与方法... @staticmethod def from_dict(obj: Any) -> 'Hashtag': # 其他字段解析逻辑... _EndsIn30 = [EndsIn30.from_dict(y) for y in obj.get("EndsIn30", [])] # 其他字段解析逻辑... return Hashtag(..., EndsIn30=_EndsIn30, ...)
扩展建议
对于高度嵌套的JSON,自动生成的数据类通常不会处理空值、可选字段这类场景,建议:
- 批量检查所有生成的
from_dict方法,对所有列表类型字段都添加空值处理 - 改用
pydantic库定义数据模型,它原生支持可选字段、空值兼容和自动类型转换,比手动维护from_dict更高效
内容的提问来源于stack exchange,提问作者8oris
相关产品推荐
相关产品推荐

