by aromanovich

aromanovich / jsl

A Python DSL for describing JSON schemas

207 Stars 23 Forks Last release: Not found Other 127 Commits 18 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


.. image:: https://travis-ci.org/aromanovich/jsl.svg?branch=master :target: https://travis-ci.org/aromanovich/jsl :alt: Build Status

.. image:: https://coveralls.io/repos/aromanovich/jsl/badge.svg?branch=master :target: https://coveralls.io/r/aromanovich/jsl?branch=master :alt: Coverage

.. image:: https://readthedocs.org/projects/jsl/badge/?version=latest :target: https://readthedocs.org/projects/jsl/ :alt: Documentation

.. image:: http://img.shields.io/pypi/v/jsl.svg :target: https://pypi.python.org/pypi/jsl :alt: PyPI Version

Documentation_ | GitHub_ | PyPI_

JSL is a Python DSL for defining JSON Schemas.


.. code:: python

import jsl

class Entry(jsl.Document): name = jsl.StringField(required=True)

class File(Entry): content = jsl.StringField(required=True)

class Directory(Entry): content = jsl.ArrayField(jsl.OneOfField([ jsl.DocumentField(File, as_ref=True), jsl.DocumentField(jsl.RECURSIVE_REFERENCE_CONSTANT) ]), required=True)

will return the following JSON schema:

.. code:: json

    "$schema": "http://json-schema.org/draft-04/schema#",
    "definitions": {
        "directory": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "content": {
                    "type": "array",
                    "items": {
                        "oneOf": [
                            {"$ref": "#/definitions/file"},
                            {"$ref": "#/definitions/directory"}
            "required": ["name", "content"],
            "additionalProperties": false
        "file": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "content": {"type": "string"}
            "required": ["name", "content"],
            "additionalProperties": false
    "$ref": "#/definitions/directory"



pip install jsl


BSD license

.. _Documentation: https://jsl.readthedocs.io/ .. _GitHub: https://github.com/aromanovich/jsl .. _PyPI: https://pypi.python.org/pypi/jsl .. _BSD license: https://github.com/aromanovich/jsl/blob/master/LICENSE

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.