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

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


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.1.0.tar.gz (43.5 kB view details)

Uploaded Source

Built Distributions

jsonschema_rs-0.1.0-cp38-cp38-manylinux2010_x86_64.whl (12.9 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

jsonschema_rs-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl (10.1 MB view details)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

jsonschema_rs-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

jsonschema_rs-0.1.0-cp35-cp35m-manylinux2010_x86_64.whl (4.5 MB view details)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

File details

Details for the file jsonschema_rs-0.1.0.tar.gz.

File metadata

  • Download URL: jsonschema_rs-0.1.0.tar.gz
  • Upload date:
  • Size: 43.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for jsonschema_rs-0.1.0.tar.gz
Algorithm Hash digest
SHA256 af14ba2ef81ce348550ac3ed9a3802c3ee8e5e5152638030dadece945b622812
MD5 170fae85903f6047caa4b92dfa895b22
BLAKE2b-256 d31846c251cfc769b41e4f3a759dd866d9b9baf8e2d46be4ae496c97fa92c98b

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.1.0-cp38-cp38-manylinux2010_x86_64.whl.

File metadata

  • Download URL: jsonschema_rs-0.1.0-cp38-cp38-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 12.9 MB
  • Tags: CPython 3.8, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for jsonschema_rs-0.1.0-cp38-cp38-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 ffdc0de2ac2652e7d45fe775f32039cede67635f69d95fb033fbcae0c9611f7e
MD5 5cbcc14aef75326c6a49d283e619d975
BLAKE2b-256 061dbfaa538c185a29c7d992492fe470b83d002e3ac1228c308937e238029de2

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: jsonschema_rs-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 10.1 MB
  • Tags: CPython 3.7m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for jsonschema_rs-0.1.0-cp37-cp37m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 cd64faafd41d8c649776ff14336623b9c61dba36fe632fde69a889d2c6e59144
MD5 831e1d454ab72160764e6fb542318daf
BLAKE2b-256 0454b1f1cab9a3f61fcfe5e62e1c69c76065c11044d9c4b36b91f033058563ac

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: jsonschema_rs-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.6m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for jsonschema_rs-0.1.0-cp36-cp36m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5fbf9a3ed7038e6099da5fb78f9f80dfb8f36e169603650eff99ab7887eca619
MD5 b011081eb3f910530ad0abebdb6d64ed
BLAKE2b-256 36013494bb76c26b2d6596dea257a6214d954ca1ebc2b9dd05999ed435459c86

See more details on using hashes here.

File details

Details for the file jsonschema_rs-0.1.0-cp35-cp35m-manylinux2010_x86_64.whl.

File metadata

  • Download URL: jsonschema_rs-0.1.0-cp35-cp35m-manylinux2010_x86_64.whl
  • Upload date:
  • Size: 4.5 MB
  • Tags: CPython 3.5m, manylinux: glibc 2.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.1.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.7

File hashes

Hashes for jsonschema_rs-0.1.0-cp35-cp35m-manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 76e14de73120daab740aafa962e12c66c0720492aaec529b8aad031f5b55e20c
MD5 a1c4096147dfcf56d228168d7e715d65
BLAKE2b-256 abd9fe12bd5d3e589a8d82d5c1fdc7fee82f3ed99fc1c2b2d1f9b342decd6f12

See more details on using hashes here.

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