You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:15