jsonsubschema
jsonsubschema checks if one JSON schema is a subschema (subtype) of another.
For any two JSON schemas s1 and s2, s1 <: s2 (reads s1 is subschema/subtype of s2) if every JSON document instance that validates against s1 also validates against s2.
jsonsubschema is very useful in analysing schema evolution and ensuring that newer schema versions are backward compatible. jsonsubschema also enables static type checking on different components of a system that uses JSON schema to describe data interfaces among the system's different components.
The details of JSON subschema are covered in our ISSTA 2021 paper, which received a Distinguished Artifact Award:
@InProceedings{issta21JSONsubschema,
author = {Habib, Andrew and Shinnar, Avraham and Hirzel, Martin and Pradel, Michael},
title = {Finding Data Compatibility Bugs with JSON Subschema Checking},
booktitle = {The ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)},
year = {2021},
pages = {620--632},
url = {https://doi.org/10.1145/3460319.3464796},
}
I) Obtaining the tool
Requirements
- Python 3.8 or higher
- Other python dependencies will be installed during the installation process
You can either install jsonsubschema from PyPI or from the source code on GitHub.
A) Install from PyPI
Execute the following:
pip install jsonsubschema
B) Install from GitHub source code
Execute the following:
git clone https://github.com/IBM/jsonsubschema.git
cd jsonsubschema
pip install .
For development installation (editable mode):
pip install -e .
II) Running subschema
JSON subschema provides two usage interfaces:
A) CLI interface
- Create two JSON schema examples by executing the following:
echo '{"type": ["null", "string"]}' > s1.json
echo '{"type": ["string", "null"], "not": {"enum": [""]}}' > s2.json
- Invoke the CLI by executing:
python -m jsonsubschema.cli s2.json s1.json
B) python API
from jsonsubschema import isSubschema
def main():
s1 = {'type': "integer"}
s2 = {'type': ["integer", "string"]}
print(f'LHS <: RHS {isSubschema(s1, s2)}')
if __name__ == "__main__":
main()
License
jsonsubschema is distributed under the terms of the Apache 2.0 License, see LICENSE.txt.
Contributions
json-subschema is still at an early phase of development and we welcome contributions. Contributors are expected to submit a 'Developer's Certificate of Origin', which can be found in DCO1.1.txt.
Metadata
Release files for jsonsubschema 0.0.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| jsonsubschema-0.0.8.tar.gz | 44.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jsonsubschema-0.0.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 73.1 kB
Release files / jsonsubschema-0.0.8.tar.gz
| Download URL | jsonsubschema-0.0.8.tar.gz |
|---|---|
| Size | 44.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
39846ece264fe62aae5dd86e71bef8899a5d0869b8be03ab582066acbee7f9d9
|
|
BLAKE2b-256 checksum How to use checksums |
6bb20e2b7fca010d39789e0394170e0ef814ff29fcdc1639ee0db595f3b3ba94
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.
Transparency logRelease files / jsonsubschema-0.0.8-py3-none-any.whl
| Download URL | jsonsubschema-0.0.8-py3-none-any.whl |
|---|---|
| Size | 28.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4ab42ad1de7795f5b2abe9842cc797a135a18b24d9ff6b09e4d7ad4a8d2ea4a5
|
|
BLAKE2b-256 checksum How to use checksums |
2ae3c4721c54f2f28b4b263a007dafe5916ed352af28f44bbd7dcdf676c9b31a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.
Transparency log