Fast JSON Schema validation for Python implemented in Rust
Project description
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
NOTE. This library is in early development and not yet provide a way to show validation errors (even though it is implemented in the underlying Rust crate).
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 |
273.01 ns |
263.29 ns |
904.38 ns |
4.96 ms |
fastjsonschema |
49.77 ns (x0.18) |
130.21 ns (x0.49) |
5.7 us (x6.31) |
575.66 ms (x115.84) |
jsonschema |
278.27 ns (x1.01) |
2.41 us (x9.15) |
75.27 us (x83.23) |
1.83 s (x368.47) |
Validators are not compiled (jsonschema) or compiled on every validation:
library |
false |
{"minimum": 10} |
small |
big |
---|---|---|---|---|
jsonschema-rs |
349.74 ns |
465.67 ns |
6.97 us |
5.15 ms |
fastjsonschema |
62.46 us (x178.59) |
112.64 us (x241.9) |
1.33 ms (x191.67) |
574.5 ms (x111.55) |
jsonschema |
64.57 us (x184.64) |
74.2 us (x159.34) |
951.38 us (x136.37) |
1.85 s (x360.38) |
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.
Python support
jsonschema-rs supports Python 3.5, 3.6, 3.7 and 3.8.
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for jsonschema_rs-0.3.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c1e165197a0c05a745268b0219130677635e4fcdb5c615c97ceb434613c906a |
|
MD5 | 97de028d8763ad77550ca998e4e81276 |
|
BLAKE2b-256 | a5f02721f0e3689ea736e5e0c09e57dde3afa33fa5e971171921bf8377a7dbdb |
Hashes for jsonschema_rs-0.3.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f4ab2f7c3a6b466665585a1656a6b3c657825bcbb78826e6107ebbc82d56a19a |
|
MD5 | dffc6c209c9e91795fce1d6c25a29a97 |
|
BLAKE2b-256 | 3d964e92939e99442128d911788f26eadb6b1d0e73d9ab7c51af473e0a18a838 |
Hashes for jsonschema_rs-0.3.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | a146afaa32bf2528f23ec2c88565a9cf60afd6826b9da39b1dcb0417c6eeb132 |
|
MD5 | 7e29c976c7123a709034e1dcf7bd2ee5 |
|
BLAKE2b-256 | 2b6dcc609d7bbe8e9ba60add15b737ac235f4b4e8e7c1d159999f6c434f5d7c9 |
Hashes for jsonschema_rs-0.3.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ac545bda8016a7e04f06eba381c4117a857adac605b04b09484cd94995fc4ec |
|
MD5 | d180459339ee9b63fbf3ed36c5186bd8 |
|
BLAKE2b-256 | b7e47e3869e3bd95299b1d41a6119760a0fd955725985e6cf04c3f6efb666931 |