如何在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
相关产品推荐
相关产品推荐

