寻求支持JSON Meta Schema的Pydantic模型库及运行时解析JSON Schema至Pydantic模型的功能
嘿,这个问题我刚好研究过,给你梳理两个实用的方案:
方案1:用Pydantic原生功能实现运行时JSON Schema转模型
其实Pydantic本身就支持在运行时把JSON Schema直接解析成对应的Pydantic模型,完全不需要额外安装库。核心就是用BaseModel.from_json_schema()这个类方法,举个实际例子你一看就懂:
from pydantic import BaseModel # 假设这是用户定义的JSON Schema user_provided_schema = { "type": "object", "properties": { "username": {"type": "string", "minLength": 3}, "age": {"type": "integer", "minimum": 18} }, "required": ["username"] } # 一键转换成Pydantic模型 UserDefinedModel = BaseModel.from_json_schema(user_provided_schema) # 现在就可以用这个模型做数据验证了 sample_data = {"username": "john_doe", "age": 25} validated_data = UserDefinedModel(**sample_data) print(validated_data) # 输出: username='john_doe' age=25
这个方法完全满足你“运行时解析JSON Schema为Pydantic模型”的需求,而且是官方原生支持,稳定性有保障。
方案2:获取JSON Meta Schema对应的Pydantic模型
如果你需要专门的Pydantic模型来验证用户提交的JSON Schema本身是否符合规范(也就是基于JSON Meta Schema做校验),有两个途径:
方式A:手动生成通用Meta Schema模型
你可以直接把JSON官方的Meta Schema(比如Draft 7或2020-12版本)加载进来,用刚才的from_json_schema()方法生成对应的Pydantic模型:
import requests from pydantic import BaseModel # 加载JSON Schema Draft 2020-12的Meta Schema meta_schema = requests.get("https://json-schema.org/draft/2020-12/schema").json() # 生成对应的Pydantic模型 JsonMetaSchemaModel = BaseModel.from_json_schema(meta_schema) # 用这个模型验证用户提交的Schema是否合规 user_submitted_schema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": {"email": {"type": "string", "format": "email"}}, "required": ["email"] } validated_schema = JsonMetaSchemaModel(**user_submitted_schema)
方式B:用现成库直接调用
如果不想手动处理Meta Schema的加载,可以用json-schema-pydantic这个第三方库,它已经封装了不同Draft版本的JSON Meta Schema对应的Pydantic模型。
先安装:
pip install json-schema-pydantic
然后使用:
from json_schema_pydantic import JsonSchemaDraft202012 # 直接用预定义的模型验证用户Schema user_schema = { "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": {"phone": {"type": "string", "pattern": "^\\+?[0-9]{10,15}$"}}, "required": ["phone"] } validated = JsonSchemaDraft202012(**user_schema)
总结一下
- 只需要转JSON Schema为Pydantic模型?用Pydantic原生的
from_json_schema()就够了,简单高效。 - 需要验证用户提交的JSON Schema是否符合规范?要么手动生成Meta Schema模型,要么用
json-schema-pydantic直接调用预定义模型。
内容的提问来源于stack exchange,提问作者Pax0r




