Skip to main content

Fast JSON Schema validation for Python implemented in Rust

Project description

Build Version Python versions License

Fast JSON Schema validation for Python implemented in Rust.

Supported drafts:

  • Draft 7

  • Draft 6

  • Draft 4

There are some notable restrictions at the moment:

  • The underlying crate doesn’t support arbitrary precision integers yet, which may lead to SystemError when such value is used;

  • multipleOf keyword validation may produce false-negative results on some input. See #84 for more details

Installation

To install jsonschema-rs via pip run the following command:

pip install jsonschema-rs

Usage

To check if the input document is valid:

import jsonschema_rs

validator = jsonschema_rs.JSONSchema({"minimum": 42})
validator.is_valid(45)  # True

or:

import jsonschema_rs

validator = jsonschema_rs.JSONSchema({"minimum": 42})
validator.validate(41)  # raises ValidationError

NOTE. This library is in early development.

Performance

According to our benchmarks, jsonschema-rs is usually faster than existing alternatives in real-life scenarios.

However, for single-keyword or boolean schemas it might be slower than fastjsonschema.

Compiled validators (when the input schema is compiled once and reused later)

library

false

{"minimum": 10}

small

big

jsonschema-rs

141.45 ns

144.66 ns

652.84 ns

4.89 ms

fastjsonschema

48.92 ns (x0.34)

95.22 ns (x0.65)

3.91 us (x6)

554.74 ms (x113.44)

jsonschema

204.94 ns (x1.44)

1.52 us (10.54)

57.44 us (x88)

1.38 s (x282.41)

Validators are not compiled (jsonschema) or compiled on every validation:

library

false

{"minimum": 10}

small

big

jsonschema-rs

328.86 ns

448.03 ns

6.39 us

4.89 ms

fastjsonschema

55.29 us (x168.07)

106.01 us (x236.6)

1.3 ms (x204.53)

557.35 ms (x113.97)

jsonschema

45.95 us (x139.69)

54.68 us (x122.06)

758.8 us (x118.74)

1.43 s (x292.43)

The bigger the input is the bigger is performance win.

In the examples below, big and small schemas refer to more realistic schemas and input instances. You can take a look at benchmarks in benches/bench.py. Ratios are given against jsonschema-rs. Measured with stable Rust 1.44.1, Python 3.8.3 on i8700K (12 cores), 32GB RAM, Arch Linux.

Python support

jsonschema-rs supports Python 3.6, 3.7, 3.8 and 3.9.

License

The code in this project is licensed under MIT license. By contributing to jsonschema-rs, you agree that your contributions will be licensed under its MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jsonschema_rs-0.4.2.tar.gz (8.7 kB view hashes)

Uploaded Source

Built Distributions

jsonschema_rs-0.4.2-cp39-cp39-win_amd64.whl (1.6 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

jsonschema_rs-0.4.2-cp39-cp39-macosx_10_15_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.9 macOS 10.15+ x86-64

jsonschema_rs-0.4.2-cp38-cp38-win_amd64.whl (1.6 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

jsonschema_rs-0.4.2-cp38-cp38-macosx_10_15_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.8 macOS 10.15+ x86-64

jsonschema_rs-0.4.2-cp37-cp37m-win_amd64.whl (1.6 MB view hashes)

Uploaded CPython 3.7m Windows x86-64

jsonschema_rs-0.4.2-cp37-cp37m-macosx_10_15_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.7m macOS 10.15+ x86-64

jsonschema_rs-0.4.2-cp36-cp36m-win_amd64.whl (1.6 MB view hashes)

Uploaded CPython 3.6m Windows x86-64

jsonschema_rs-0.4.2-cp36-cp36m-macosx_10_15_x86_64.whl (1.7 MB view hashes)

Uploaded CPython 3.6m macOS 10.15+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page