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

如何依据$schema关键字创建适配的JSON Schema验证器

自动适配JSON Schema草案版本创建验证器

当然可以,jsonschema库提供了现成工具帮你自动匹配对应草案的验证器,不用手动导入不同的DraftXXXValidator类。

核心是用jsonschema.validators.validator_for()函数,它会自动读取Schema里的$schema字段来匹配对应的验证器类;就算没有$schema字段,也能根据Schema的特性推断最合适的草案版本。

示例代码

import jsonschema

# 带有2020-12版本标识的Schema
sample_schema = {
    "$schema": "https://json-schema.org/draft/2020-12/json-schema-core.html",
    "type": "object",
    "properties": {
        "name": {"type": "string"},
        "age": {"type": "integer", "minimum": 0}
    },
    "required": ["name"]
}

# 自动获取对应草案的验证器类
validator_cls = jsonschema.validators.validator_for(sample_schema)
# 可选:先验证Schema自身是否符合对应草案规范
validator_cls.check_schema(sample_schema)
# 创建验证器实例
validator = validator_cls(sample_schema)

# 验证合法数据
valid_data = {"name": "Bob", "age": 25}
validator.validate(valid_data)  # 无输出即为验证通过

# 验证非法数据
invalid_data = {"age": -3}
try:
    validator.validate(invalid_data)
except jsonschema.exceptions.ValidationError as err:
    print(f"验证失败: {err.message}")

关键说明

  • 不管你的Schema用的是2020-12、2019-09还是Draft7等版本,validator_for()都能正确识别并返回对应的验证器类。
  • 调用check_schema()是个好习惯,能提前发现Schema本身的语法或规范问题,避免后续验证出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:01:19