Skip to main content

Extended JSON Schema Validator

Project description

Extended JSON Schema validator, Python edition

This library and program validates both JSON Schema and JSON-like contents. The contents can be physically represented either as JSON or as YAML files.

The JSON schemas should be compliant with JSON Schema versions supported by the installed jsonschema library. As of version 4.16 they are Draft04, Draft06, Draft07, Draft2019-09 and Draft2020-12 specifications.

The installation instructions are in INSTALL.md .

History

The roots of this code come from https://github.com/inab/benchmarking-data-model/tree/0.4.0/toolsForValidation.

Its development was later followed at [https://github.com/fairtracks/fairtracks_validator/], where implementations in other programming languages were also hosted. Python code gained traction and real modularisation there.

As this Python code is relevant to several research projects, it has been split from its latest repo, keeping the core and original extensions here at https://github.com/inab/python-extended-json-schema-validator, and keeping specific FAIRTracks extensions at https://github.com/fairtracks/fairtracks_validator_python.

Extensions

A description of the base JSON Schema extensions implemented in this repository is available at README-extensions.md.

Usage

python jsonValidate.py --help
# or if the package was installed through pypi
ext-json-validate -h
usage: jsonValidate.py [-h] [--log-file LOGFILENAME] [--log-format LOGFORMAT] [-q] [-v] [-d] [-C CONFIGFILENAME]
                       [--cache-dir CACHEDIR] [-c] [--schema_id_path SCHEMA_ID_PATH]
                       [--guess-schema | --use-schemas USE_SCHEMAS [USE_SCHEMAS ...]] [--fix]
                       [--report REPORTFILENAME] [--annotation ANNOTREPORT] [--verbose-report] [--error-report]
                       [--dot-report FILENAME TITLE] [--invalidate | --read-only] [--warm-up | --lazy-load]
                       [--iter-arrays] [-V]
                       json_schema_or_dir [json_file_or_dir [json_file_or_dir ...]]

Validate JSON against JSON Schemas with extensions (version 0.12.3)

positional arguments:
  json_schema_or_dir    The JSON Schema, either in JSON or YAML file format, or directory with them to validate
                        and use
  json_file_or_dir      The JSONs, either in JSON or YAML file formats, or directories with them to be validated
                        (default: None)

optional arguments:
  -h, --help            show this help message and exit
  --log-file LOGFILENAME
                        Store messages in a file instead of using standard error and standard output (default:
                        None)
  --log-format LOGFORMAT
                        Format of log messages (default: %(asctime)-15s - [%(levelname)s] %(message)s)
  -q, --quiet           Only show engine warnings and errors (default: None)
  -v, --verbose         Show verbose (informational) messages (default: None)
  -d, --debug           Show debug messages (use with care, as it could potentially disclose sensitive contents)
                        (default: None)
  -C CONFIGFILENAME, --config CONFIGFILENAME
                        Configuration file (used by extensions) in YAML format (default: None)
  --cache-dir CACHEDIR  Caching directory (used by extensions) (default: None)
  -c, --continue        Show all the error messages instead of stopping on the first one (default when a report
                        file is requested) (default: False)
  --schema_id_path SCHEMA_ID_PATH
                        When the content read from the file is going to be validated, JSON Path (accepted by
                        jsonpath-ng) used to get the schema id which identifies the schema to be used by the
                        validator (default: "@schema"|"_schema"|"$schema")
  --guess-schema        Try to validate the input JSONs against all the loaded schemas (default: False)
  --use-schemas USE_SCHEMAS [USE_SCHEMAS ...]
                        Try to validate the input JSONs against any of the loaded schemas matching these URIs
                        (default: None)
  --fix                 When some validation error arises, an editor instance (from $EDITOR environment variable)
                        is launched giving the chance to fix the files, and then it is validated again. The cycle
                        is repeated until all the files are correct or the program is interrupted (default: False)
  --report REPORTFILENAME
                        Store validation report (in JSON format) in a file (default: None)
  --annotation ANNOTREPORT
                        JSON Path (accepted by jsonpath-ng) to extract an annotation to include from validated
                        JSON in the report (for instance, '$._id') (default: None)
  --verbose-report      When this flag is enabled, the report also embeds the json contents which were validated
                        (default: True)
  --error-report        When this flag is enabled, the report only includes the entries with errors (default:
                        False)
  --dot-report FILENAME TITLE
                        Depict the schemas in a file using DOT format, providing the title given in the second
                        param (default: None)
  --invalidate          Caches managed by the extensions are invalidated on startup (default: False)
  --read-only           When this flag is enabled, the caches managed by the extensions are read-only, avoiding
                        expensive operations related to the caches (default: True)
  --warm-up             Caches managed by the extensions are warmed up on startup (default: None)
  --lazy-load           Caches managed by the extensions are warmed up in a lazy way (default: True)
  --iter-arrays         It some of the inputs is an array, shred it and process each element separately (default:
                        False)
  -V, --version         show program's version number and exit

Next lines run validations using test data:

python jsonValidate.py test-data/foreign_key_example/schemas/ test-data/foreign_key_example/good_validation/
python jsonValidate.py test-data/foreign_key_example/schemas/ test-data/foreign_key_example/bad_validation/

If your JSON schemas are properly defined, but you are fixing issues in a set of JSON files, you can run it in an iterative way:

git clone https://github.com/inab/benchmarking-data-model
EDITOR="geany -i" python jsonValidate.py --fix benchmarking-data-model/json-schemas/1.0.x benchmarking-data-model/prototype-data/1.0.x/QfO-fail

And this is an asciinema (to be updated) recording a previous version of FAIRTracks Validator:

asciicast

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

extended_json_schema_validator-0.15.3.tar.gz (59.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

extended_json_schema_validator-0.15.3-py3-none-any.whl (56.5 kB view details)

Uploaded Python 3

File details

Details for the file extended_json_schema_validator-0.15.3.tar.gz.

File metadata

File hashes

Hashes for extended_json_schema_validator-0.15.3.tar.gz
Algorithm Hash digest
SHA256 bdae438fa75f2869fa4e2fe05cd31f56f22352e065a315350db22efc05b23147
MD5 aef4d1af47cf84c854ec881237f58d83
BLAKE2b-256 22a5330c85b008142af41103d1ff988fb2f7257d548744c71a19a997c322fd0b

See more details on using hashes here.

File details

Details for the file extended_json_schema_validator-0.15.3-py3-none-any.whl.

File metadata

File hashes

Hashes for extended_json_schema_validator-0.15.3-py3-none-any.whl
Algorithm Hash digest
SHA256 78d9341dbcf652dd40a229de114dc1167a9f8e6eb0acf26bbcf8d602980ceac7
MD5 aa30c450f16947082efe3411fe7a0e1b
BLAKE2b-256 a9066e7b424f1e919ed8ee771a7ed8d661b2d028886bfcabdb7ba6c66e0aee08

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page