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

含必填id字段的JSON经Pydantic验证时提示字段缺失的问题

问题分析与解决

你的代码问题出在实例化方式错误,不是字段定义的问题。

错误原因

你写的Event().model_validate_json(external_data)会先执行Event(),这一步会尝试创建一个没有传入任何参数的Event实例——但你的id是必填字段,这时候就已经触发了验证失败,后续的model_validate_json其实根本没正确处理外部JSON数据。错误提示里的input_value={}也能佐证这一点:验证时传入的是空字典,也就是你先创建空实例时的输入。

正确写法

直接通过Event类调用model_validate_json方法,不需要先实例化:

from pydantic import BaseModel

class Event(BaseModel):
    id: str

external_data = """
  {
  "id": "abcdef",
  "status": "confirmed"
  }
"""

# 直接用类调用model_validate_json
event = Event.model_validate_json(external_data)

print(event)  # 输出: id='abcdef'

另外两种等效的正确写法:

  • 解析JSON后传给类构造函数:
import json

event = Event(**json.loads(external_data))
  • 使用model_validate方法:
event = Event.model_validate(json.loads(external_data))

为什么改成id: str=None能运行?

当你把id设为可选(默认值None)时,Event()可以成功创建空实例(因为id不是必填了),之后调用model_validate_json会更新这个实例的字段值,所以不会报错。但这是绕开问题的写法,不是正确的解决方案——你的业务逻辑里id应该是必填的,所以不应该这么改。

内容的提问来源于stack exchange,提问作者hm-distro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:03:13