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 |
320.3 ns |
329.32 ns |
1.15 us |
5.8 ms |
fastjsonschema |
52.29 ns (x0.16) |
134.43 ns (x0.4) |
6.01 us (x5.22) |
587.5 ms (x101.29) |
jsonschema |
289.97 ns (x0.9) |
2.52 us (x7.65) |
74.98 us (x65.2) |
2.02 s (x348.27) |
Validators are not compiled (jsonschema) or compiled on every validation:
library |
false |
{"minimum": 10} |
small |
big |
---|---|---|---|---|
jsonschema-rs |
402.35 ns |
908.06 ns |
9.54 us |
5.9 ms |
fastjsonschema |
64.08 us (x159.26) |
119.57 us (x131.67) |
1.43 ms (x149.89) |
599.84 ms (x101.66) |
jsonschema |
67.74 us (x168.36) |
76.62 us (x84.37) |
1.02 ms (x106.91) |
2.11 s (x357.62) |
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.1.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffdc0de2ac2652e7d45fe775f32039cede67635f69d95fb033fbcae0c9611f7e |
|
MD5 | 5cbcc14aef75326c6a49d283e619d975 |
|
BLAKE2b-256 | 061dbfaa538c185a29c7d992492fe470b83d002e3ac1228c308937e238029de2 |
Hashes for jsonschema_rs-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cd64faafd41d8c649776ff14336623b9c61dba36fe632fde69a889d2c6e59144 |
|
MD5 | 831e1d454ab72160764e6fb542318daf |
|
BLAKE2b-256 | 0454b1f1cab9a3f61fcfe5e62e1c69c76065c11044d9c4b36b91f033058563ac |
Hashes for jsonschema_rs-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fbf9a3ed7038e6099da5fb78f9f80dfb8f36e169603650eff99ab7887eca619 |
|
MD5 | b011081eb3f910530ad0abebdb6d64ed |
|
BLAKE2b-256 | 36013494bb76c26b2d6596dea257a6214d954ca1ebc2b9dd05999ed435459c86 |
Hashes for jsonschema_rs-0.1.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76e14de73120daab740aafa962e12c66c0720492aaec529b8aad031f5b55e20c |
|
MD5 | a1c4096147dfcf56d228168d7e715d65 |
|
BLAKE2b-256 | abd9fe12bd5d3e589a8d82d5c1fdc7fee82f3ed99fc1c2b2d1f9b342decd6f12 |