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.0-cp312-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e717c312623eb5258efdbf49a1d70b5c2d29f19b9e1e359df6a65a04e0dfe290 |
|
MD5 | 407564a1185d314b86d4c8aa5b025522 |
|
BLAKE2b-256 | 3b57cbbbd13c519eebcbdd7a412e458c85983ada03032a0d50a8babf8b6d5954 |
Hashes for jsonschema_rs-0.19.0-cp312-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | cf3bc5214ef768ab2f68c5bc31850dc5202102fcb5655ba509d6d67af2c7d546 |
|
MD5 | 401783921bd72e108f500afd5d45652e |
|
BLAKE2b-256 | d26df03b96aba4d69d31b561b81d616f4d6f113d05df841df1f95f2183b975f9 |
Hashes for jsonschema_rs-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 818cb1757a86453f3406d540eaba27d9815dd55e19a9bb2611cc9dcc42c89f6d |
|
MD5 | 1fb892862db455ac7a215c48bfee274b |
|
BLAKE2b-256 | 757bf1797686724a4ce84fb4ecb3c569152d6ec0e2db2174feeaf23d9a98cf5d |
Hashes for jsonschema_rs-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2504276fee73d87bd9f691ee07788134e96c87a20d57dfeed5cf21ae86ca2403 |
|
MD5 | a942207f5b5f5d2214b9bd9b780c26d7 |
|
BLAKE2b-256 | 385f6f8ada4ece2d7f4c6253387060041a0ef66691f2199389858ce32c16f60c |
Hashes for jsonschema_rs-0.19.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c7f3ac7dce7508f617147153c66fd524b4519a4dc9f72590e44b6c0faa58ce02 |
|
MD5 | eb1ce2d1b3bdd5b64be3caa7e300dac4 |
|
BLAKE2b-256 | 517dd464788859f6eedd4ecb2e050d5259501ee35dfc09d76a55a98c26baad1e |
Hashes for jsonschema_rs-0.19.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b7caa60c920522d0d758942972122e70ea49fd8ad073ccedd6943d42d17fe891 |
|
MD5 | 801b9eede6d82e90f0e173a5991bec54 |
|
BLAKE2b-256 | dea0522d6f4b246b0a7af05910823f048311b9b62bbee681defe99e012d4e694 |
Hashes for jsonschema_rs-0.19.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 58c2fdda55c98401a0a8c0269921a04e903efc0f8dff017a9c23008194926893 |
|
MD5 | e15ad6ef19afb557620632ead8b7f44e |
|
BLAKE2b-256 | 91cc74badd3e80db31fede3b219ff1e8101f88eced752b5ec7dcc7bfcfb56e26 |
Hashes for jsonschema_rs-0.19.0-cp311-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8fbf282d77fd3cb0722de02cafad11ce6ad034da23e8b74e2a8d632e366ac6d2 |
|
MD5 | 1d0c2e0b3d68b05b321a1164f2619b06 |
|
BLAKE2b-256 | eead5df096b0c959b7ab5f0074707c77d561d72b0f2b8789c16abab9838cc8ff |
Hashes for jsonschema_rs-0.19.0-cp311-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fdd6784e98f57525fdd6b27dd19035a98b71a43499422dd1706850e4efc1b337 |
|
MD5 | b7dbaeac0d29e5342836573cc11d081b |
|
BLAKE2b-256 | 7eb0ba5ac545d4461ec0f25ce4b8793f1c54139d51a824596fd9628c60fddec5 |
Hashes for jsonschema_rs-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f14ae5cdc665a3c50c4c273947b983333a19988ce8747da47e6091f94be7075c |
|
MD5 | bf131e017efc866a50af268ea4c6d8a3 |
|
BLAKE2b-256 | d69590f14b5f8afd817d2927e50b5ad96452cebe87ed7caad7bcfdbe47c455b8 |
Hashes for jsonschema_rs-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dca0772d2eee7c9ca539f43ade3e1bc90f11917648a3e24253330185eb099df8 |
|
MD5 | 6d330981b61fde9c299a47de904ce901 |
|
BLAKE2b-256 | 471888e4bc046596449e69ed91cb5eda8704311057c0efd0db08a473e48f80b7 |
Hashes for jsonschema_rs-0.19.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bc5d6c07bd01731ccc822d8fc24521ad91db7b4e997648254bd84907edd087e |
|
MD5 | 0b97919a5da0afec17b31c0fa17aa918 |
|
BLAKE2b-256 | afdb5da9ed19e939b4e8051080841402f2aa61169a67c54e09e70b0eb01151c7 |
Hashes for jsonschema_rs-0.19.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f7a2f678980faae0467308b97d90f5a5780bb56bd2c8261cd0106818ed46f535 |
|
MD5 | 2e34b643c1699125a087e8809ace867e |
|
BLAKE2b-256 | e7a90d43675b2bd64eaa85398aa50ddd7180a5e9e6d1e013bb14b440c78c55b1 |
Hashes for jsonschema_rs-0.19.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e34941ac1d5466052168fcfe0652f909e678a1dd3c2b77f16cb377723282ddc |
|
MD5 | 00cd2032388755b9b076980d10dad3c3 |
|
BLAKE2b-256 | 658535d4c10a6fb05c22e9d97676cd32a524cc4b64872bbbeeffa4f7f460bbb7 |
Hashes for jsonschema_rs-0.19.0-cp310-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e3228da311fccb5ec17b27719c669f76f27f2996aa13b335ce302ec5970a1914 |
|
MD5 | 4b397aca489306b7324015e6c3e1c1aa |
|
BLAKE2b-256 | ad2c986ff44bdb0c79ebca2d9c1abf92178e80d15b7d88819c7c48b7ba7e2c74 |
Hashes for jsonschema_rs-0.19.0-cp310-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8cad677ed4a01a99e0f4c451778bbae0a5de83ec6fed52f2a32596e3fcff3af2 |
|
MD5 | 36897fbbaf41d21eae60452e87ebb459 |
|
BLAKE2b-256 | fbf61820a5f62d9c7f03e2ae2bdfb5df871add85e8c898a11a8368b882ec0d9f |
Hashes for jsonschema_rs-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1d38727c9968bc3009623dd0ade0b695fec280f4c3d914604956259da0c7b081 |
|
MD5 | 0105ca9988be722e4dad8af5195d7c8f |
|
BLAKE2b-256 | 553f913c830d015dd8a0d5656849419ff326d7f57bfeafc77b84e5964bdfe6a6 |
Hashes for jsonschema_rs-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 22419b09272f736882e7ea196d8196e32c2bb05307b51ab6b8ca7b982933f556 |
|
MD5 | 68761cbc9b2ff7d0a0bedfd611a2a42f |
|
BLAKE2b-256 | 3aa9a282fd48c05bcd28f8d5f67ffc2e1d98b932185cb8d60c008e8f84fe10be |
Hashes for jsonschema_rs-0.19.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfb20c342d863b565d64f4aa17a118e69694ce861aef8fa8d0da21009c5087cf |
|
MD5 | 0cd4e9dd63c0234c26df7b60535f0368 |
|
BLAKE2b-256 | 53743c82786a89437cc5654b4275686e9755a991859d5386cab8f1b2a7a3cbeb |
Hashes for jsonschema_rs-0.19.0-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | fe8150e05a5ceeecc55a573672372cbd82331e792e66b36e66877bcb509841c6 |
|
MD5 | 9d1bad981638d3ebf3b4c085c05335eb |
|
BLAKE2b-256 | a4884c2c80cf0cadc70c265dc7a8c9ab7291279689c021ba93cd0d06e2ef324f |
Hashes for jsonschema_rs-0.19.0-cp310-cp310-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b5200d885bd51e7d07877d5f084a8625d093ce826aa6c8db3a67d1253bb3105e |
|
MD5 | 755c5f04dfa2689a2767e03f583bece6 |
|
BLAKE2b-256 | 5d88b68f0326e1f00746f19a88983b9e24e7503804175ea05b71ca1caeb0804f |
Hashes for jsonschema_rs-0.19.0-cp39-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90785a68898a0f64309a951ec2228e7df973eaff5b5567396242362d044511aa |
|
MD5 | 1d60cef8e00c04301f6d8dadbf37b8a0 |
|
BLAKE2b-256 | 12b1c111ce623ef3d66ca73ec26b88f0061f56c8e726458218c02eff28df9f92 |
Hashes for jsonschema_rs-0.19.0-cp39-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9c75021b2819756bbf55dfad35bef3a21695449c239666774b1736625bbb4794 |
|
MD5 | a2d16702a624a8d9dbdee4c5e0ec9723 |
|
BLAKE2b-256 | 9d7ae619f2620dae3a8195af4b8d252f0ad97fde6905d4750a6d6ef3fa0feea3 |
Hashes for jsonschema_rs-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1426e80d359abc3dd96f0e3ca2f83549b02f8716f5b223ab4f70040f366808c9 |
|
MD5 | 4294827ed60d77f9f9cc3b9b868cba6d |
|
BLAKE2b-256 | 98478fa6f7d4209ec477ba2e8bccfc357f2fdd657bcedebd3583e4a5cf0077c3 |
Hashes for jsonschema_rs-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bfc1c733826b6de98f2508edb93dd31000ced69bf75e0d7ea2494087f0f6e2f8 |
|
MD5 | b1b9a3837e2c3923237a3f8a218c3b7c |
|
BLAKE2b-256 | 4a9a89027ff795c83156cf9ea2f4c207250589c929ca1e02b6c81ee50057f386 |
Hashes for jsonschema_rs-0.19.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b32f1987c43993987ddb04538bdbc46f4cee5d2d0fce26d1503f17ea063200ea |
|
MD5 | 6d4c4c303b79b78b289b35d9e8d9d7dc |
|
BLAKE2b-256 | 081ab01f2b1a5ff79a6b8ed334a53b49c607481d990e43a4147aae5ec80639da |
Hashes for jsonschema_rs-0.19.0-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4fd489b8e140c34e623b26060492ec2af0de043b882427dddadcda98da09aefd |
|
MD5 | e5f46bf010c3483eb5740099f4e0c635 |
|
BLAKE2b-256 | e0af5ee9a03d9b087b20c9c77ff343acad53a28843128db60f731a68c8eded88 |
Hashes for jsonschema_rs-0.19.0-cp39-cp39-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e00d1afcbc5731df68cf77789efbbd6e74d31b5208dc16c063c165540976be1 |
|
MD5 | d1248b3dc4ebdcdd7cb9cef704353a3d |
|
BLAKE2b-256 | 3abcbd30ff130404a118691130c4b12a2415bf848ecf03f617fb21606d06f49e |
Hashes for jsonschema_rs-0.19.0-cp38-none-win_amd64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5a0de171fa53652871fb82663194b2f9eb1fb3ef844eeb58980d99dc135e8a9f |
|
MD5 | 0ad9d6efb91f7571caea6cf626d2f033 |
|
BLAKE2b-256 | 1c0feefea704ba8f8b46a3659da2349af4643ab712bbb3b9efc544c566ef3748 |
Hashes for jsonschema_rs-0.19.0-cp38-none-win32.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | dd4e50f00031670c761370d5b582ffe3b2d2c5f15818533847427e2d810908ce |
|
MD5 | af0b3c3c05b035b2c11c2f552787e4dc |
|
BLAKE2b-256 | d3686d1c23c64f7d407e921be49d4f3991e4294051257d3be4817463751ee214 |
Hashes for jsonschema_rs-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | bd119530d9f257a670df6b12a787a95d365327b55b3071b49c6ef8f2931a3ae2 |
|
MD5 | b3a231d1ea8e63e92ea23ff2ab77d704 |
|
BLAKE2b-256 | eca1d9a2b4c26894140724925a3a4cdac5d1e6e2cc74c4db48fb3bb50a7f617f |
Hashes for jsonschema_rs-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c5c895489cd95b994472bee2f4e13ff6b1a00a23eac627e90670e0f789c3c242 |
|
MD5 | 7b0b6d48aae01a137e232109c11cc827 |
|
BLAKE2b-256 | 0917962dd1f032338500f59371e8ad7f542f2c4ce948338e3fa30a498a582594 |
Hashes for jsonschema_rs-0.19.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 041a7e12b930b74d42d813ae3175e3c5dac17a02c6f065ac1d4db952e1517c2a |
|
MD5 | d0e4d45b5bd11e710d70715c8635ce69 |
|
BLAKE2b-256 | 0a3fdc83bcbd703b56b56dfa99ed526378581dc6d3be6113546b70c061d34222 |
Hashes for jsonschema_rs-0.19.0-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 070463b548891c28fe69debfddadee66efb1f8c8ac6cddae691c0d4254a990c7 |
|
MD5 | 36c198590dfe34cddab82b9e34d926e1 |
|
BLAKE2b-256 | 7f3828a64c52f04c25c69dae6cb9f34f81173c14eaa79e871eccdf483eb33373 |
Hashes for jsonschema_rs-0.19.0-cp38-cp38-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 588c6b98cb71ba182d5a3b1ad9ab185109c21b31628895060fc621acbde98fcd |
|
MD5 | 60d2d4a04d211911bb81aa3452a92b37 |
|
BLAKE2b-256 | 19fe2567c7f7a2f09a6f701728c19d17a56fd2bd474107df2e9ea176676fc1c7 |