A high-performance JSON Schema validator for Python
Project description
jsonschema-rs
A high-performance JSON Schema validator for Python.
import jsonschema_rs
validator = jsonschema_rs.JSONSchema({"minimum": 42})
# Boolean result
validator.is_valid(45)
# Raise a ValidationError
validator.validate(41)
# ValidationError: 41 is less than the minimum of 42
#
# Failed validating "minimum" in schema
#
# On instance:
# 41
# Iterate over all validation errors
for error in validator.iter_errors(40):
print(f"Error: {error}")
Highlights
- 📚 Support for popular JSON Schema drafts
- 🌐 Remote reference fetching (network/file)
- 🔧 Custom format validators
Supported drafts
Compliance levels vary across drafts, with newer versions having some unimplemented keywords.
You can check the current status on the Bowtie Report.
Limitations
- No support for arbitrary precision numbers
Installation
To install jsonschema-rs
via pip
run the following command:
pip install jsonschema-rs
Usage
If you have a schema as a JSON string, then you could use
jsonschema_rs.JSONSchema.from_str
to avoid parsing on the
Python side:
validator = jsonschema_rs.JSONSchema.from_str('{"minimum": 42}')
...
You can specify a custom JSON Schema draft using the draft
argument:
import jsonschema_rs
validator = jsonschema_rs.JSONSchema(
{"minimum": 42},
draft=jsonschema_rs.Draft7
)
JSON Schema allows for format validation through the format
keyword. While jsonschema-rs
provides built-in validators for standard formats, you can also define custom format validators
for domain-specific string formats.
To implement a custom format validator:
- Define a function that takes a
str
and returns abool
. - Pass it with the
formats
argument.
import jsonschema_rs
def is_currency(value):
# The input value is always a string
return len(value) == 3 and value.isascii()
validator = jsonschema_rs.JSONSchema(
{"type": "string", "format": "currency"},
formats={"currency": is_currency}
)
validator.is_valid("USD") # True
validator.is_valid("invalid") # False
Performance
jsonschema-rs
is designed for high performance, outperforming other Python JSON Schema validators in most scenarios:
- Up to 30-390x faster than
jsonschema
for complex schemas and large instances - Generally 2-5x faster than
fastjsonschema
on CPython - Comparable or slightly slower performance for very small schemas
For detailed benchmarks, see our full performance comparison.
Python support
jsonschema-rs
supports CPython 3.8, 3.9, 3.10, 3.11, and 3.12.
Support
If you have questions, need help, or want to suggest improvements, please use GitHub Discussions.
Sponsorship
If you find jsonschema-rs
useful, please consider sponsoring its development.
Contributing
We welcome contributions! Here's how you can help:
- Share your use cases
- Implement missing keywords
- Fix failing test cases from the JSON Schema test suite
See CONTRIBUTING.md for more details.
License
Licensed under 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.19.1-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22c571f400f6f21aed98349af924b9949c0fa684020195748de780b57c7032a7 |
|
MD5 | c9eb2a0b9076e7a0bbe0db121ac52e8c |
|
BLAKE2b-256 | 049a3bd6d2dd3e46b087547b5c05755481a5037e5bc055ca441bfe356959a551 |
Hashes for jsonschema_rs-0.19.1-cp312-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8ab2c2e004c08bb169055029724aea202de771c84cdc50de03d5dc26f652f3ae |
|
MD5 | e665786f8c33ecfc90231799616da537 |
|
BLAKE2b-256 | c6b2e759c121ba4a7eb81ef5d536341900b329d476f31e39adb5895aa4f29495 |
Hashes for jsonschema_rs-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ac1cf548cc12d3dd698876ec0c58cd32740218aa6a17631a2f4ad5d52a93010 |
|
MD5 | 0bac9ac6876ce72bdc53268e0b175257 |
|
BLAKE2b-256 | cb488cdda2dab67dd127fb7ee4628e3504dcfe708618d7f1b5b53a532d99e45d |
Hashes for jsonschema_rs-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78144132d7b5339133c522a72deb80c86875ef0b9d5367aff6bc902b0c5279bf |
|
MD5 | 034aeeb40c86aa54d8e3a58d0166f281 |
|
BLAKE2b-256 | 735843413e5fc109b68a93b849857ef13e4bc3ae0032bd8508d122389c144a51 |
Hashes for jsonschema_rs-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fc948073682ddcf73331ace0129081feafdd3e655cc400251230eac985ca21d4 |
|
MD5 | e57864a2989fce724aac7edc2314e651 |
|
BLAKE2b-256 | 93b59e3f5d6e333cd4732f9031e44a1a83083492fcb794afe7f4acdee8e0a779 |
Hashes for jsonschema_rs-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 96cfd4f9f7dddbf983834f6a014564004d14047c28a611b371e843e9abdcdca9 |
|
MD5 | b91c48b4f50beb3cb52b12fc52b35390 |
|
BLAKE2b-256 | 2a0b7611211e62c1b2949597f8acff61abc53cc16bd73ce016222a8342f4c238 |
Hashes for jsonschema_rs-0.19.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2f5babf5dbb18c59fa35419312a5b947ade72ed04802e366a4e56a3c24dcf79 |
|
MD5 | 82f64a2784f9145acdb54364f94b3e89 |
|
BLAKE2b-256 | 3bf48f57f79983f78f97ff143d738c60836d2ed3276438a3aae0613905565cb4 |
Hashes for jsonschema_rs-0.19.1-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2900eadc6d271d128f8ee54bc812a152ed55f5d0358ae474bca8e641272c196c |
|
MD5 | c06e6de39e0283b3aa66e1ada93493fb |
|
BLAKE2b-256 | a01cf6df95010bdf6c8625ee830e9ba7739ae98a2db33a2d5ddcc4e8ae140b3b |
Hashes for jsonschema_rs-0.19.1-cp311-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7de32951327ce0dfec7ce5336ea78a3b4bbe9a554450d8171b2ef0a5c939033c |
|
MD5 | 4ad01d8319181cfe9f8ab66217dfcb53 |
|
BLAKE2b-256 | e384d984839791d1cb1da6e15f33a6893063a9854b53ce139fe7ba0e4e760174 |
Hashes for jsonschema_rs-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54f6cbb9a1a2a4a1a1ed26ca52d2f449d6125baa5f47d15a64c45faf2537f5ec |
|
MD5 | 8ccf5fbe564d461509262dd3e943e8e2 |
|
BLAKE2b-256 | b1b20dac10fe131f7d3e5ab457e4ff4c680b2d8e0e33cba5a38a96aaaf4dc81e |
Hashes for jsonschema_rs-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 254e3142ec38702fa8a4fc4cd5547c35333620fafacf82db3e5cc107162f4bf3 |
|
MD5 | 053020715fa03e5338810c10cc54f4ae |
|
BLAKE2b-256 | 05f48ee5079fa6bfd5df150b6e5b690b38beb2a5770c464bd4e0be1c97c1203b |
Hashes for jsonschema_rs-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 310c1a1ccd2c7af5cbc9fa2e6cf7b21c1767b2f15a571d0efc9cc560aa8adc64 |
|
MD5 | af863660cf4a64358bfb03fc7b5a99c9 |
|
BLAKE2b-256 | 4daa83e06d0fa5d30b931ae341a8d8b5ea8d019ed068ccc7125ccae6094dbbf3 |
Hashes for jsonschema_rs-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee73f12bd045c9015e10a10c3087b377f433770259b1b686535cd69d07b4446e |
|
MD5 | f494dcf187144e9aa6243895b93ab674 |
|
BLAKE2b-256 | eb63b744bf71692c4c80f680a46c6f09d3c2312d9c02c0202516b92c8f3272c1 |
Hashes for jsonschema_rs-0.19.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 41b60ba25fa434c9c0b35100adc12bd4a7e36c544beaf5bb4465cdfb34b9bd84 |
|
MD5 | 4f074bcc321cd3398ca3f382a3515bd5 |
|
BLAKE2b-256 | 51d79994b44c81d75b8f40fbe9545879e65f496d6b0be47888cfb7b36f3f7630 |
Hashes for jsonschema_rs-0.19.1-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 471c58cfcb74b244d0a3dd36fd975a9202d089193713587fc45652e529ef1320 |
|
MD5 | 20ad0701e5315906383e222d0c0686d3 |
|
BLAKE2b-256 | 0c5a378d31ace25afa82bd1e0f4c85013476d480d33a773d36c1ba1150547a8d |
Hashes for jsonschema_rs-0.19.1-cp310-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6580d201e3b266436bd05d7f17f888472df75f751d01aaa776cea2d7b6a71834 |
|
MD5 | a9b341f6fe904878e062a33612dc3794 |
|
BLAKE2b-256 | fac3468a9b844aa729a73963ccd02d51d962644f8a27ecaf7b1e3731fa7d41ac |
Hashes for jsonschema_rs-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bf0f3c0d83270dc4c35e630432e4a51006ef8f7ddf489f0d72d4371869ff4dbf |
|
MD5 | 58e726788e561187b833fba8c78cf133 |
|
BLAKE2b-256 | 6eccaf1d53a3d475f945599fa038a74e2833aeed13f0fcc3029ec1fe160d39d0 |
Hashes for jsonschema_rs-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3dd4a0e19bb26211f693d964aac76210a937b65579a16e7c96a89228f5ab98b7 |
|
MD5 | 9a6b024d27842faef29f5c5e2ee04194 |
|
BLAKE2b-256 | 5994bf3ca0ddfc3b82f8eaaee53e673e4becd994dfa570c1a69c7ac63c260564 |
Hashes for jsonschema_rs-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e8ccef4a72a038eac9cb6d89e805e06b6f195c2db63ef5b298908a10601cbd73 |
|
MD5 | d35afc6bc5bc42dafe611ec67e58bdd4 |
|
BLAKE2b-256 | 8be7e22d4772015696eaf6e88ce30857a626e5dd82a73e8b8d46ba27eaf79f30 |
Hashes for jsonschema_rs-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 47350e8364b428a0f604db9bbc58aef345e6b5ed883543a5a0978c3ba43eccf9 |
|
MD5 | 85d3290f4cec8f56dceaa094b1ef9af8 |
|
BLAKE2b-256 | 804f0554e26ef8043a84499119526264d4754e84fcd4a66961c2fe13c7ea7c7c |
Hashes for jsonschema_rs-0.19.1-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 39fcbe26a6685f274170b6ba825f9f0ca3167bc79b2c316aecb39d611a0f5622 |
|
MD5 | eb0b80ce1efa466a92d95878e27a2398 |
|
BLAKE2b-256 | f8710058b88f11e4ee8084cadf67fb0acb19e46fd40ce78456d0cafbe920755b |
Hashes for jsonschema_rs-0.19.1-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ccb76b78966a7d9babb3a58b614698044802f5ad2ef5b997fa91ba0f1fb5d5b5 |
|
MD5 | f11bd53e1bce0c3b3d83af297f24b942 |
|
BLAKE2b-256 | 24a02ef5da489e0ba14288364545a848dc1ff39ac0a9f379f20c926f615c56ec |
Hashes for jsonschema_rs-0.19.1-cp39-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 056d6f2cb90630fa9b4b2e7b195e37118610f012f22ea58ebdeac5b0a68df039 |
|
MD5 | dae47d3dde886acc7913bf5a3ae4518e |
|
BLAKE2b-256 | 35f8558285fd9c7fa1def1514c589054c8c937e2ea415ac89273c24d5daffa16 |
Hashes for jsonschema_rs-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cceaad8cbfaf93fe1bcaa26f720767e1e0ae9054413db1b7bf28c5236d8852b3 |
|
MD5 | 53875fbb9b5aa220802c1a671a086c50 |
|
BLAKE2b-256 | bf43411ca90f50921c72db77fc1beeb5f350fa463fe96cfd051708db31ff5887 |
Hashes for jsonschema_rs-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0f76291ca8acbfdd6904911f2253adcab9487fce43fc884aa7275a56fc413d5b |
|
MD5 | a494482fff386ff9658ad36e8b579317 |
|
BLAKE2b-256 | 8235db03da1e8cd13a7c088103be7f5b307fa0fd538fcd47ae6ff7e3ae89f5b5 |
Hashes for jsonschema_rs-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0fcac93cc652e1453d406ca460663f6c4bac042cc9a5ba5532272ee1b31fdd0 |
|
MD5 | d83ea870268983c0684200700b747df8 |
|
BLAKE2b-256 | f824ba6f6359d4879bf4142507412f28313fc9b382cfed5c4e80c282fb7f269f |
Hashes for jsonschema_rs-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 27ac7bde960c918e2ad03feccd2ed38c00f1a25f50dbfe3d146b0da1b6c038ac |
|
MD5 | 1ebb6c18e0cd1fc902614939a32ee272 |
|
BLAKE2b-256 | 02af8d17ffc4aadfd7b953e79b9d023d124d80d82ecfb6d2c280ba251f7bb1ac |
Hashes for jsonschema_rs-0.19.1-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | eee08669a3754b9ffb33247fe92ead315fb2d7ee384419c9c0c32875f0d26e08 |
|
MD5 | 98be48588e62f1c8f04041ceaa6d67c4 |
|
BLAKE2b-256 | c2b5e3a680057f44992a1424d5b0a7984b0bb4f73518a2eb7a8e38dbb9264894 |
Hashes for jsonschema_rs-0.19.1-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cea5928d451a1232a5656350c5a9e695d2cb7d28c1c4ad182c20a39659e21c28 |
|
MD5 | 327ec32c77ac910dac72649c7e168c5d |
|
BLAKE2b-256 | eccfa1b1052e4d743b1dadabae8f47e802c85ab32d37f6b8a685af8236b04e07 |
Hashes for jsonschema_rs-0.19.1-cp38-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b4c144029630c763ecf04e5247afe10aa5a85c7b0045e54fd52da9212439e984 |
|
MD5 | bb55fe60b50278db7cfb7f1bb1b258d2 |
|
BLAKE2b-256 | e9b93e797710b75eb0bd0404098673c753707b4eb0de7310abbf41611093b0a1 |
Hashes for jsonschema_rs-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 08c1f30c2c9e0f35b6c782933ac5b2984ea91d3ed5ba903285cca36bcdfed993 |
|
MD5 | 5ab5646a3692ba7142dd110bef09318e |
|
BLAKE2b-256 | acf07aa1e25d4f8d2410be3d6214fcf6a16c6f410c40e243ce98b8837ce327cc |
Hashes for jsonschema_rs-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d61bdc4d873f58d37bbeeaa6b41743fa187fedade3f3291258b1dee1ccb61e81 |
|
MD5 | 84dce21e5eb0e08880ec0647fb1fd22e |
|
BLAKE2b-256 | 2912c387b99dd84bda55258c74746e77d79a837efc975a0f565e583eb353f669 |
Hashes for jsonschema_rs-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e35bd960f2753d6572642dbe7301ec43b31574e641e786914bdd300befbc1323 |
|
MD5 | e37c1d3d48d1ac999c830edde6b01006 |
|
BLAKE2b-256 | a092bf95ce191c23a6996f454413bdfb28b270a3f9bd80b94c225495775adca3 |
Hashes for jsonschema_rs-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 179f8bfab2bfef56a864a86e77f3ed137a0820ee3d0d0021f3d3a5b0c004b45f |
|
MD5 | 8008d3f0b8bd3b8112e612d662f6be52 |
|
BLAKE2b-256 | ab6a1181a3baa1b355383a22251749c9e0c5b3fb22e8c359a4324d16567b093e |
Hashes for jsonschema_rs-0.19.1-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5205622f2953ee74bf8f72cd22fcb62e7bb78ae6733d4e54f9634fb23c69c81 |
|
MD5 | 120d9fbc35f81383f7cd7dd4d1f14025 |
|
BLAKE2b-256 | 601882955224d6825512df5c55251f080c49f1aee162d4e0c86c7742279337e5 |