本文目录导读:

是的,在 Python 中进行 JSON Schema 验证时,最常用且推荐的方式就是使用 jsonschema 库。
jsonschema 是 Python 中最流行的 JSON Schema 验证库,它完全实现了 JSON Schema 规范(支持 Draft 4/6/7/2019-09/2020-12 等多个版本)。
基本用法
安装
pip install jsonschema
简单示例
from jsonschema import validate
# 定义 Schema
schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer", "minimum": 0},
"email": {"type": "string", "format": "email"}
},
"required": ["name", "age"]
}
# 待验证的数据
data = {
"name": "小明",
"age": 25,
"email": "xiaoming@example.com"
}
# 验证
validate(instance=data, schema=schema)
print("验证通过!")
处理验证错误
from jsonschema import validate, ValidationError
try:
invalid_data = {
"name": "小明",
"age": -5, # 年龄不能为负
"email": "invalid-email" # 邮箱格式错误
}
validate(instance=invalid_data, schema=schema)
except ValidationError as e:
print(f"验证失败: {e.message}")
print(f"错误路径: {list(e.path)}")
print(f"Schema路径: {list(e.schema_path)}")
使用验证器类(更灵活)
from jsonschema import Draft7Validator
# 创建验证器
validator = Draft7Validator(schema)
# 逐个检查错误
errors = sorted(validator.iter_errors(data), key=lambda e: e.path)
for error in errors:
print(f"属性: {error.path[0]}, 错误: {error.message}")
高级用法
自定义格式验证
from jsonschema import validate, FormatChecker
# 创建格式检查器
format_checker = FormatChecker()
# 使用格式检查
validate(
instance=data,
schema=schema,
format_checker=format_checker
)
引用外部 Schema
from jsonschema import RefResolver, Draft7Validator
# 创建 Schema 仓库
schema_store = {
"http://example.com/schemas/user.json": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"name": {"type": "string"}
}
}
}
# 创建引用解析器
resolver = RefResolver.from_schema(schema_store)
# 主 Schema 引用外部 Schema
main_schema = {
"$ref": "http://example.com/schemas/user.json"
}
# 验证
validator = Draft7Validator(main_schema, resolver=resolver)
validator.validate({"id": 1, "name": "Alice"})
其他替代方案
虽然 jsonschema 是最常用的,但也有一些其他选择:
-
fastjsonschema:性能更好,适合大规模验证
import fastjsonschema validate = fastjsonschema.compile(schema) validate(data)
-
JSON Schema 标准库(Python 3.11+):内置轻量级验证
import json from jsonschema import Draft202012Validator
推荐
- 一般使用:直接用
jsonschema库,功能最全面 - 性能要求高:考虑
fastjsonschema - 简单场景:Python 3.11+ 的内置验证器
是的,Python 中 JSON Schema 验证的首选方案就是使用 jsonschema 库。