Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/marksparkza/jschon
An object-oriented JSON Schema implementation for Python.
https://github.com/marksparkza/jschon
json json-patch json-pointer json-schema
Last synced: 7 days ago
JSON representation
An object-oriented JSON Schema implementation for Python.
- Host: GitHub
- URL: https://github.com/marksparkza/jschon
- Owner: marksparkza
- License: mit
- Created: 2020-04-19T13:55:46.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-05-26T07:30:03.000Z (7 months ago)
- Last Synced: 2024-12-08T13:00:19.814Z (14 days ago)
- Topics: json, json-patch, json-pointer, json-schema
- Language: Python
- Homepage: https://jschon.readthedocs.io
- Size: 675 KB
- Stars: 138
- Watchers: 3
- Forks: 13
- Open Issues: 36
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGELOG.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
README
jschon
======|python| |pypi| |docs| |tests| |codecov| |license| |downloads|
An object-oriented JSON Schema implementation for Python.
----
**Note from the author:**
Hi! I'm Mark, and this is my personal Python-powered project.
Work on jschon is currently on hold due to other commitments.
Development will resume as and when time allows.----
Features
--------
* JSON Schema validator implementation
(`drafts 2019-09, 2020-12 `_)* Schema compilation and indexing
* $ref loading from local and remote sources
* Support for custom keywords, vocabularies and meta-schemas
* Support for format validation* JSON class implementing the JSON data model
* JSON Pointer (`RFC 6901 `_)
* JSON Patch (`RFC 6902 `_)
* Relative JSON Pointer (`draft `_)Installation
------------
::pip install jschon
For remote $ref support, the requests library is required. It may be installed with::
pip install jschon[requests]
Example
-------
Create a JSON schema:.. code-block:: python
from jschon import create_catalog, JSON, JSONSchema
create_catalog('2020-12')
demo_schema = JSONSchema({
"$id": "https://example.com/demo",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"description": "Cool! We got a string here!"
},
{
"type": "integer",
"description": "Hey! We got an integer here!"
}
]
}
})Validate JSON data:
.. code-block:: python
result = demo_schema.evaluate(
JSON([12, "Monkeys"])
)Generate JSON Schema-conformant output:
>>> result.output('basic')
{
"valid": True,
"annotations": [
{
"instanceLocation": "",
"keywordLocation": "/items",
"absoluteKeywordLocation": "https://example.com/demo#/items",
"annotation": True
},
{
"instanceLocation": "/0",
"keywordLocation": "/items/anyOf/1/description",
"absoluteKeywordLocation": "https://example.com/demo#/items/anyOf/1/description",
"annotation": "Hey! We got an integer here!"
},
{
"instanceLocation": "/1",
"keywordLocation": "/items/anyOf/0/description",
"absoluteKeywordLocation": "https://example.com/demo#/items/anyOf/0/description",
"annotation": "Cool! We got a string here!"
}
]
}Links
-----
* `Documentation `_
* `Package info `_
* `Source code `_.. |tests| image:: https://github.com/marksparkza/jschon/actions/workflows/tests.yml/badge.svg
:target: https://github.com/marksparkza/jschon/actions/workflows/tests.yml
:alt: Test status.. |codecov| image:: https://codecov.io/gh/marksparkza/jschon/branch/main/graph/badge.svg
:target: https://codecov.io/gh/marksparkza/jschon
:alt: Code coverage.. |pypi| image:: https://img.shields.io/pypi/v/jschon
:target: https://pypi.org/project/jschon
:alt: PyPI package version.. |python| image:: https://img.shields.io/pypi/pyversions/jschon
:target: https://www.python.org/downloads/
:alt: Supported Python versions.. |docs| image:: https://readthedocs.org/projects/jschon/badge/?version=latest
:target: https://jschon.readthedocs.io/en/latest/?badge=latest
:alt: Documentation status.. |license| image:: https://img.shields.io/github/license/marksparkza/jschon
:target: https://github.com/marksparkza/jschon/blob/main/LICENSE
:alt: MIT license.. |downloads| image:: https://static.pepy.tech/badge/jschon
:target: https://pepy.tech/project/jschon
:alt: Total downloads