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

