Skip to main content
https://img.shields.io/pypi/v/jsonmodel.svg https://img.shields.io/pypi/l/jsonmodel.svg https://img.shields.io/coveralls/github/collectiveacuity/jsonmodel.svg

jsonModel

A Collection of Methods for Validating JSON Structured Data

Downloads:

http://pypi.python.org/pypi/jsonModel

Source:

https://github.com/collectiveacuity/jsonModel

Documentation:

https://collectiveacuity.github.io/jsonModel/

Introduction

Json Model is designed to facilitate the process of implementing data validation against a declared json data model. The jsonModel class offers a more intuitive declaration process than other schema enforcement modules currently available by relying upon the architecture of json itself to validate datatypes, requirements and defaults.

Installation

From PyPi:

$ pip install jsonmodel

From GitHub:

$ git clone https://github.com/collectiveacuity/jsonmodel
$ cd jsonmodel
$ python setup.py install

Getting Started

This module uses self-valid schema declarations as a method to describe data requirements. As a result, for many data models, full validation can be achieved from an example declaration using the schema key:

{
  "schema": {
    "userID": "gY3Cv81QwL0Fs",
    "datetime": 1456000345.543713,
    "active": true,
    "address": {
      "city": "New Orleans",
      "region": "LA",
      "postal_code": "",
      "country": "United States"
    }
  }
}

[In this model, the input must contain values for all four top level keys and each value must correspond to the datatype in the model. So, the input must have a userID field with a string, a datetime field with a number, an active key with a boolean and the address field must be a dictionary which itself contains city, region and country values. Since it is empty, postal_code is optional. If a value is provided for postal_code however, it must be a string.]

In addition to intuitive self-valid schema declarations, jsonModel also offers a rich way to further refine the conditionality of any property in the model through an accompanying components map whose key names correspond to the path to the schema property which requires additional validation:

{
  "schema": { ... },
  "components": {
    "userID": {
      "min_length": 13,
      "max_length": 13,
      "must_not_contain": [ "[^\\w]", "_" ]
    },
    "address.city": {
      "discrete_values": [ "New Orleans", "New York", "Los Angeles", "Miami" ],
      "required_field": false
    }
  }
}

[In this model, the process of checking the inputs will also check the paths designated in the components dictionary to make sure that values do not violate any of the additional attributes of the property declared in the components. Whenever they may conflict with the attributes declared in the schema example, the conditions in the components map supersedes. So, in this case, the requirement that an address contain a city key-value has been turned off. But if a city is provided, it must match one of the four city values provided. Likewise, any value provided in userID must be no more than nor less than 13 characters long and can only be composed of alphanumerical characters.]

This module also validates the architecture of the model declarations themselves to facilitate the model design process and ensure that no models break the rules of the module. Error reports are provided to identity the scope of conditionals applicable to any given property in addition to the module documentation.

To declare the model:

{
    "schema": {
        "property": "value"
    },
    "components": {},
    "title": "my cool data model",
    "description": "model for performance analytics records of my sweet app",
    "metadata": { "version": "1.1.1" },
    "url": "https://collectiveacuity.com/api/mycoolresource?jsonmodel=true",
    "max_size": 1024,
}

[all fields except schema are optional]

To import the schema:

import json

sample_schema = json.loads(open('sample-schema.json').read())

To initialize the class object:

from jsonmodel.validators import jsonModel

valid_model = jsonModel(sample_schema)

To validate input against model declaration:

valid_model.validate(input)

To validate input against an individual component:

path_to_root = 'dot.path[2].field'
valid_model.validate(input, path_to_root)

To handle invalid inputs:

try:
    valid_model.validate(invalid_input)
except InputValidationError as err:
    assert err.error['error_code'] > 4000

To customize error message:

input_title = 'Property field in input'
valid_model.validate(input, path_to_root, input_title)

To filter valid input based upon query criteria:

query_criteria = { 'dot.path[2].field': 'exact value' }
assert valid_model.query(query_criteria, valid_input)

query_criteria = { 'dot.path[2].field': { 'excluded_values': [ 'exact value' ] } }
assert not valid_model.query(query_criteria, valid_input)

To produce html documentation of model criteria:

from jsonmodel.extensions import tabulate
tabulate(valid_model)
html_table = valid_model.tabulate()

Further Reading

For more details about how to use jsonModel, refer to the Reference Documentation on GitHub

Release files for jsonmodel 3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jsonmodel 3.1
File Size Uploaded
jsonmodel-3.1.tar.gz 38.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jsonmodel 3.1
File Interpreter ABI Platform
jsonmodel-3.1-py3-none-any.whl Python 3 none any Details

Total release size: 70.2 kB

Release files / jsonmodel-3.1.tar.gz

Download URL jsonmodel-3.1.tar.gz
Size 38.7 kB
Tags Source
SHA-256 checksum
How to use checksums
d8796a3fb56dc326a6c2d28789858e2fcc3b3ba73a02cd477ea279b5275eb8ea
BLAKE2b-256 checksum
How to use checksums
58cadacb9042958eb7309e10923604d787103d1e42227db60f9924b2a7721283
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7

Release files / jsonmodel-3.1-py3-none-any.whl

Download URL jsonmodel-3.1-py3-none-any.whl
Size 31.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c1906271c128883bca0dd9c7a205b93e72731f7991e0b45909213bb4c20bb44c
BLAKE2b-256 checksum
How to use checksums
0ad725c81db371b2c118fda3ff0e79a16fbd3f4993457297f9c5af2e85b86f5d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.45.0 CPython/3.7.7

Release history Release notifications | RSS feed

3.4

2 release files

3.3

2 release files

3.2

2 release files

This release

3.1 This release

2 release files

3.0

2 release files

2.9

2 release files

2.8

2 release files

2.7

3 release files

2.6

3 release files

2.5

3 release files

2.4

3 release files

2.2

3 release files

2.1

3 release files

2.0

3 release files

1.6

3 release files

1.5

3 release files

1.4

3 release files

1.3

3 release files

1.2

3 release files

1.1

3 release files

1.0

3 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page