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

使用Pydantic解析嵌套JSON时如何跳过层级直接提取enabled布尔值

可以实现,不需要为每个子字段单独定义Pydantic类,有两种常用的实现方案:

方案1:预处理JSON数据

先把API返回的嵌套结构拍平为和模型属性一一对应的键值对,再传入模型实例化,适合只在单一场景解析该数据的情况:

import json

# 第一步:解析API返回的JSON为字典
response_dict = json.loads(你的API响应字符串)
raw_features = response_dict["features"]

# 第二步:拍平处理嵌套结构
processed_features = {}
for key, value in raw_features.items():
    if key == "due_dates":
        # due_dates下的字段直接对应模型属性,直接合并
        processed_features.update(value)
    else:
        # 其他字段统一取enabled值
        processed_features[key] = value["enabled"]

# 第三步:实例化模型
features = Features(**processed_features)

方案2:模型内新增前置验证器

把拍平逻辑写到Pydantic模型内部,自动处理输入数据,适合多处需要解析该结构的场景,复用性更高:

from pydantic import BaseModel, model_validator
from typing import Any

class Features(BaseModel):
    multiple_assignees: bool = False
    start_date: bool = False
    remap_due_dates: bool = False
    remap_closed_due_date: bool = False
    time_tracking: bool = False
    tags: bool = False
    time_estimates: bool = False
    checklists: bool = False
    custom_fields: bool = False
    remap_dependencies: bool = False
    dependency_warning: bool = False
    portfolios: bool = False
    points: bool = False
    custom_items: bool = False
    zoom: bool = False
    milestones: bool = False
    emails: bool = False

    @model_validator(mode="before")
    @classmethod
    def flatten_nested_features(cls, data: Any) -> Any:
        if not isinstance(data, dict):
            return data
        flattened = {}
        for key, value in data.items():
            if key == "due_dates":
                flattened.update(value)
            else:
                # 取不到enabled时默认返回False,兼容异常情况
                flattened[key] = value.get("enabled", False)
        return flattened

使用时直接传入API返回的features字段即可:

response_dict = json.loads(你的API响应字符串)
features = Features(**response_dict["features"])

如果你使用的是Pydantic v1版本,将@model_validator(mode="before")替换为@root_validator(pre=True)即可,逻辑部分无需修改。
模型中定义的默认值会自动生效,比如JSON未返回的time_tracking字段会默认赋值为False,无需额外处理。

内容的提问来源于stack exchange,提问作者Zach Johnson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:36:03