跳转到主要内容

Python的高性能JSON Schema验证器

项目描述

jsonschema-rs

Build Version Python versions License Supported Dialects

Python的高性能JSON Schema验证器。

import jsonschema_rs

schema = {"maxLength": 5}
instance = "foo"

# One-off validation
try:
    jsonschema_rs.validate(schema, "incorrect")
except jsonschema_rs.ValidationError as exc:
    assert str(exc) == '''"incorrect" is longer than 5 characters

Failed validating "maxLength" in schema

On instance:
    "incorrect"'''

# Build & reuse (faster)
validator = jsonschema_rs.validator_for(schema)

# Iterate over errors
for error in validator.iter_errors(instance):
    print(f"Error: {error}")
    print(f"Location: {error.instance_path}")

# Boolean result
assert validator.is_valid(instance)

⚠️ 从pre-0.20.0升级?请检查我们的迁移指南以了解关键更改。

亮点

  • 📚 支持流行的JSON Schema草案
  • 🌐 远程引用抓取(网络/文件)
  • 🔧 自定义格式验证器

支持的草案

各草案的合规程度不同,较新版本可能未实现一些关键字。

  • Draft 2020-12
  • Draft 2019-09
  • Draft 7
  • Draft 6
  • Draft 4

您可以在Bowtie Report上检查当前状态。

限制

  • 不支持任意精度数字

安装

要使用pip安装jsonschema-rs,请运行以下命令

pip install jsonschema-rs

使用方法

如果您有一个JSON字符串形式的模式,则可以将其传递给validator_for以避免在Python端进行解析

validator = jsonschema_rs.validator_for('{"minimum": 42}')
...

您可以使用特定于草稿的验证器来处理不同的 JSON Schema 版本

import jsonschema_rs

# Automatic draft detection
validator = jsonschema_rs.validator_for({"minimum": 42})

# Draft-specific validators
validator = jsonschema_rs.Draft7Validator({"minimum": 42})
validator = jsonschema_rs.Draft201909Validator({"minimum": 42})
validator = jsonschema_rs.Draft202012Validator({"minimum": 42})

JSON Schema 允许通过 format 关键字进行格式验证。虽然 jsonschema-rs 提供了内置的标准格式验证器,但您也可以为特定领域字符串格式定义自定义格式验证器。

要实现自定义格式验证器

  1. 定义一个函数,该函数接受一个 str 并返回一个 bool
  2. 将其与 formats 参数一起传递。
import jsonschema_rs

def is_currency(value):
    # The input value is always a string
    return len(value) == 3 and value.isascii()


validator = jsonschema_rs.validator_for(
    {"type": "string", "format": "currency"}, 
    formats={"currency": is_currency}
)
validator.is_valid("USD")  # True
validator.is_valid("invalid")  # False

性能

jsonschema-rs 是为高性能设计的,在大多数场景下优于其他 Python JSON Schema 验证器

  • 对于复杂模式和大型实例,比 jsonschema30-390x
  • 在 CPython 上,通常比 fastjsonschema2-5x
  • 对于非常小的模式,性能相当或略慢

有关详细基准测试,请参阅我们的 完整性能比较

Python 支持

jsonschema-rs 支持 CPython 3.8、3.9、3.10、3.11 和 3.12。

致谢

此库从 Python jsonschema 包中获得了 API 设计的灵感。我们感谢 Python jsonschema 维护者及贡献者们在 JSON Schema 验证方面的开创性工作。

支持

如果您有任何问题、需要帮助或希望提出改进建议,请使用 GitHub 讨论区

赞助

如果您觉得 jsonschema-rs 有用,请考虑 赞助其开发

贡献

我们欢迎贡献!以下是您可以如何帮助的方式

有关更多详细信息,请参阅 CONTRIBUTING.md

许可

许可协议下

许可证


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

jsonschema_rs-0.22.2.tar.gz (1.4 MB 查看哈希)

上传于 来源

构建的发行版

jsonschema_rs-0.22.2-cp312-none-win_amd64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.12 Windows x86-64

jsonschema_rs-0.22.2-cp312-none-win32.whl (1.7 MB 查看哈希值)

上传于 CPython 3.12 Windows x86

jsonschema_rs-0.22.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.22.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

jsonschema_rs-0.22.2-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (2.1 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.12+ i686

jsonschema_rs-0.22.2-cp312-cp312-macosx_10_12_x86_64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.12+ x86-64

jsonschema_rs-0.22.2-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.9 MB 查看哈希值)

上传于 CPython 3.12 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

jsonschema_rs-0.22.2-cp311-none-win_amd64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.11 Windows x86-64

jsonschema_rs-0.22.2-cp311-none-win32.whl (1.7 MB 查看哈希值)

上传于 CPython 3.11 Windows x86

jsonschema_rs-0.22.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.22.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ ARM64

jsonschema_rs-0.22.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (2.1 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.12+ i686

jsonschema_rs-0.22.2-cp311-cp311-macosx_10_12_x86_64.whl (2.0 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.12+ x86-64

jsonschema_rs-0.22.2-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.9 MB 查看哈希值)

上传于 CPython 3.11 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

jsonschema_rs-0.22.2-cp310-none-win_amd64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.10 Windows x86-64

jsonschema_rs-0.22.2-cp310-none-win32.whl (1.7 MB 查看哈希值)

上传于 CPython 3.10 Windows x86

jsonschema_rs-0.22.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.22.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.17+ ARM64

jsonschema_rs-0.22.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (2.1 MB 查看哈希值)

上传于 CPython 3.10 manylinux: glibc 2.12+ i686

jsonschema_rs-0.22.2-cp310-cp310-macosx_10_12_x86_64.whl (2.0 MB 查看哈希值)

上传时间 CPython 3.10 macOS 10.12+ x86-64

jsonschema_rs-0.22.2-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.9 MB 查看哈希值)

上传时间 CPython 3.10 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

jsonschema_rs-0.22.2-cp39-none-win_amd64.whl (1.9 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

jsonschema_rs-0.22.2-cp39-none-win32.whl (1.7 MB 查看哈希值)

上传时间 CPython 3.9 Windows x86

jsonschema_rs-0.22.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.22.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64

jsonschema_rs-0.22.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (2.1 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.12+ i686

jsonschema_rs-0.22.2-cp39-cp39-macosx_10_12_x86_64.whl (2.0 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.12+ x86-64

jsonschema_rs-0.22.2-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.9 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

jsonschema_rs-0.22.2-cp38-none-win_amd64.whl (1.9 MB 查看哈希值)

上传于 CPython 3.8 Windows x86-64

jsonschema_rs-0.22.2-cp38-none-win32.whl (1.7 MB 查看哈希)

上传于 CPython 3.8 Windows x86

jsonschema_rs-0.22.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB 查看哈希)

上传于 CPython 3.8 manylinux: glibc 2.17+ x86-64

jsonschema_rs-0.22.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

jsonschema_rs-0.22.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (2.1 MB 查看哈希)

上传于 CPython 3.8 manylinux: glibc 2.12+ i686

jsonschema_rs-0.22.2-cp38-cp38-macosx_10_12_x86_64.whl (2.0 MB 查看哈希)

上传于 CPython 3.8 macOS 10.12+ x86-64

jsonschema_rs-0.22.2-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (3.9 MB 查看哈希)

上传于 CPython 3.8 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面