如何用Pydantic 2.6.4生成含无默认非必填字段的JSON Schema?
解决Pydantic 2生成无默认值非必填字段的JSON Schema问题
要实现你需要的JSON Schema(字段无默认值、非必填、仅为string类型),可以使用Pydantic 2的Annotated结合Field显式标记字段为非必填,同时不使用Optional(避免生成null类型选项)。
正确的Pydantic模型代码
from pydantic import BaseModel, Field from typing import Annotated class Cell(BaseModel): name: str type: str organism: Annotated[str, Field(required=False)]
生成的JSON Schema
这段代码会生成完全符合你需求的Schema:
{ "title": "Cell", "type": "object", "properties": { "name": { "type": "string", "title": "Name" }, "type": { "type": "string", "title": "Type" }, "organism": { "type": "string", "title": "Organism" } }, "required": ["name", "type"] }
原理说明
- 显式标记非必填:通过
Field(required=False)告诉Pydantic该字段不需要强制填写,因此不会出现在Schema的required列表中。 - 保持纯类型定义:不使用
Optional,避免生成包含null的anyOf类型配置,确保Schema中字段仅为string类型。 - 不设置默认值:不在字段后赋值(比如
= None),这样生成的Schema不会包含default属性,符合你对“无默认值”的要求。
内容的提问来源于stack exchange,提问作者metaMeddl
相关产品推荐
相关产品推荐

