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

如何在Pydantic.schema()生成的JSON Schema中添加顶级$id字段

解决方法

你之前的写法是把$id定义成了模型的业务字段,所以会被自动放到properties属性中。要加JSON Schema的顶级元字段,需要用Pydantic提供的Schema扩展配置能力,不同版本实现方式如下:

Pydantic V1 版本

在模型的Config内部类中配置schema_extra参数即可,示例代码:

from pydantic import BaseModel
from pprint import pprint

class MySchema(BaseModel):
    # 此处编写你的业务字段,不要把$id作为普通字段定义
    name: str
    count: int

    class Config:
        schema_extra = {
            "$id": "http://my_url/my_schema.json"
        }

if __name__ == '__main__':
    pprint(MySchema.schema())

执行后输出的Schema中$id会和title、type字段同级。

Pydantic V2 版本

V2版本调整了配置项名称,使用model_config中的json_schema_extra参数实现,示例代码:

from pydantic import BaseModel
from pprint import pprint

class MySchema(BaseModel):
    # 此处编写你的业务字段
    name: str
    count: int

    model_config = {
        "json_schema_extra": {
            "$id": "http://my_url/my_schema.json"
        }
    }

if __name__ == '__main__':
    pprint(MySchema.model_json_schema())

动态生成$id的场景

如果需要根据运行时参数动态生成$id,可以在调用Schema生成方法后手动添加字段:

# V2版本示例
schema = MySchema.model_json_schema()
schema["$id"] = f"http://my_url/{dynamic_name}.json"

这样处理后的Schema也会符合你要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:36:04