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

如何使用Pydantic校验大型嵌套JSON中的少量指定字段

错误原因

你当前的写法存在逻辑冲突:

  1. 你给short_address字段设置了别名为name,Pydantic实例化时会优先从传入的顶层字典中查找name键,你的输入数据顶层没有该键,会直接触发字段缺失错误
  2. 单个字段的pre=True校验器只有在Pydantic成功定位到对应字段的输入值之后才会执行,因此你写的嵌套提取逻辑根本没有机会运行

可行解决方案

方案1:根校验器实现(兼容Pydantic v1、v2全版本)

使用根校验器直接处理完整的输入字典,主动提取嵌套路径的字段值:

import pydantic
from typing import Dict

class OfferById(pydantic.BaseModel):
    short_address: str

    @pydantic.root_validator(pre=True)
    def extract_nested_value(cls, values: Dict):
        try:
            values["short_address"] = values["json_data_feed"]["address"]["name"]
        except KeyError as e:
            raise ValueError(f"嵌套路径缺失必要字段: {e}")
        return values

# 正常实例化
some = OfferById(**data)
print(some.short_address) # 输出:home_sweet_home

方案2:Pydantic v2专属原生嵌套路径匹配

如果你使用Pydantic v2,可以直接用AliasPath指定嵌套查找路径,无需额外写校验逻辑:

from pydantic import BaseModel, Field, AliasPath

class OfferById(BaseModel):
    short_address: str = Field(validation_alias=AliasPath("json_data_feed", "address", "name"))

# 正常实例化
some = OfferById(**data)

如果需要处理路径不存在的兼容场景,给字段加Optional类型和默认值即可。


内容的提问来源于stack exchange,提问作者Степанов Александр

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:24:03