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

如何从JSON Schema动态创建运行时可用的Pydantic类对象

运行时从JSON Schema动态生成Pydantic类对象

Pydantic v2(推荐)

Pydantic v2 提供了官方原生函数 from_json_schema,可以直接从JSON Schema在运行时动态生成模型类,完全不需要提前编写静态类文件。

示例代码:

from pydantic import from_json_schema

# 定义目标JSON Schema
user_schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0},
        "email": {"type": "string", "format": "email"}
    },
    "required": ["name", "age"]
}

# 动态生成Pydantic模型类
UserModel = from_json_schema(user_schema)

# 实例化并使用模型
user_instance = UserModel(name="Alice", age=30, email="alice@example.com")
print(user_instance.model_dump())

该函数会自动解析JSON Schema中的所有约束规则,包括字段类型、必填性、格式校验、数值范围等,生成符合要求的Pydantic模型,完全适配运行时生成的场景。

Pydantic v1 兼容方案

如果仍在使用Pydantic v1,可以结合 create_model 和 from_json_schema 工具函数手动解析生成模型:

from pydantic import create_model
from pydantic.schema import from_json_schema

# 示例JSON Schema
user_schema = {
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0},
        "email": {"type": "string", "format": "email"}
    },
    "required": ["name", "age"]
}

# 解析JSON Schema得到结构化字段定义
parsed_schema = from_json_schema(user_schema)
# 构造模型字段:(类型, 默认值/必填标记)
fields = {}
type_map = {"string": str, "integer": int, "boolean": bool, "number": float}
for field_name, field_def in parsed_schema["properties"].items():
    field_type = type_map.get(field_def["type"], str)
    # 必填字段用...标记,非必填设为None
    if field_name in parsed_schema.get("required", []):
        fields[field_name] = (field_type, ...)
    else:
        fields[field_name] = (field_type, None)

# 动态创建模型
UserModel = create_model("UserModel", **fields)

# 使用模型
user_instance = UserModel(name="Bob", age=25, email="bob@example.com")
print(user_instance.dict())

注意:v1的方法需要手动处理类型映射和基础约束,复杂校验规则可能需要额外实现,建议优先升级到v2以获得更完善的原生支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:25:08