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

