jsons-to-schema: JSON to JSON Schema

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.



A JSON Schema Draft 4 Generator from JSON Instances

[Skip to ReadMe]


Change logNone available
Dependenciesaeson (>= && <0.12), aeson-pretty (>=0.7.2 && <0.8), base (>= && <4.9), bytestring (>= && <0.11), conduit (>=1.2.10 && <1.3), conduit-combinators (>= && <1.1), containers (>= && <0.6), Glob (>=0.7.14 && <0.8), hjsonschema (>=1.6.3 && <1.7), optparse-applicative (>= && <0.13), protolude (>=0.1.10 && <0.2), QuickCheck (>=2.8.2 && <2.9), safe (>=0.3.14 && <0.4), scientific (>= && <0.4), semigroups (>=0.18.2 && <0.19), text (>= && <1.3), unordered-containers (>= && <0.3), vector (>= && <0.12) [details]
Copyright2017 Gareth Tan
AuthorGareth Tan
MaintainerGareth Tan
Home pagehttps://github.com/garetht/jsons-to-schema/README.md
Source repositoryhead: git clone https://github.com/garetht/jsons-to-schema
UploadedSun Jul 30 00:20:14 UTC 2017 by garetht



Maintainers' corner

For package maintainers and hackage trustees

Readme for jsons-to-schema-0.1.0

[back to package description]

JSONs to Schema

A JSON Schema Draft 4 Generator from JSON Instances

Suppose you have an API that produces complex and somewhat varied JSON. You'd like to be able to document that API in a standard format by observing only its output. JSON Schema is a reasonable format for that. But simply generating the schema for one document will lead to an incomplete description of the API since not all documents will have all the keys in the full document. This is where this library comes in.

CLI Overview

JSONs to Schema can also be used on the command line. After locating the installed binary, run it with --help to get detailed usage instructions.

API Overview

The main API function is jsonsToSchema along with its configuration-taking equivalent, jsonsToSchemaWithConfig. This will transform a set of JSON documents into a single Maybe schema.

Other helpful functions are jsonToSchema, which transforms a single document, and schemasToSchema, which performs the actual work of schema unification.


The schema generator should satisfy these properties:

Unlike other generators strictness is meant to be customizable. Whether to allow additional properties in schema objects is something that the user can turn on and off.


When merging JSON documents the generator keeps track of only one possible underlying type for each primitive type. Thus, if there were two documents {"name": "x"} and {"cost": 24} they will be assumed to represent two different manifestations of a single document that has both the name and the cost keys, rather than two different documents.

If given an object and an array (or some other primitive type), however, the generator will be able to assume that the particular JSON document can be either an object or an array type.

Prior Art

This project was inspired by GenSON, a Python project that does much of the same, but aims to be more customizable, correct, and powerful.

Certain features were also inspired by schema-guru, but this project aims to be more customizable and have a programmatic API. Schema Guru's enum and range detection features are planned to be matched by this library.

Future Plans

Not Planned