PythonJSONSchema验证用Jsonschema吗

wen python案例 13

本文目录导读:

PythonJSONSchema验证用Jsonschema吗

  1. 基本用法
  2. 高级用法
  3. 其他替代方案
  4. 推荐

是的,在 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 是最常用的,但也有一些其他选择:

  1. fastjsonschema:性能更好,适合大规模验证

    import fastjsonschema
    validate = fastjsonschema.compile(schema)
    validate(data)
  2. JSON Schema 标准库(Python 3.11+):内置轻量级验证

    import json
    from jsonschema import Draft202012Validator

推荐

  • 一般使用:直接用 jsonschema 库,功能最全面
  • 性能要求高:考虑 fastjsonschema
  • 简单场景:Python 3.11+ 的内置验证器

是的,Python 中 JSON Schema 验证的首选方案就是使用 jsonschema 库。

抱歉,评论功能暂时关闭!