The quick-schema package

[ Tags: data, json, library, mit ] [ Propose Tags ]

[Skip to Readme]

Properties

Versions 0.1.0.0
Dependencies aeson, base (==4.8.*), hashable, scientific, text, unordered-containers, vector [details]
License MIT
Copyright (c) 2015 Ben Weitzman
Author Ben Weitzman
Maintainer benweitzman@gmail.com
Category Data, JSON
Home page https://github.com/benweitzman/quick-schema
Bug tracker https://github.com/benweitzman/quick-schema/issues
Source repository head: git clone https://github.com/benweitzman/quick-schema.git
Uploaded Tue Nov 3 03:35:26 UTC 2015 by benweitzman
Distributions NixOS:0.1.0.0
Downloads 124 total (1 in the last 30 days)
Rating 0.0 (0 ratings) [clear rating]
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]
Hackage Matrix CI

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for quick-schema-0.1.0.0

[back to package description]

quick-schema

Slimmed down json schema language and validator

Build Status Coverage Status

quick-schema defines a format for describe a restricted set of JSON document structures. It is represented in JSON and has the added benefit that a JSON document can be it's own be it's own schema.

quick-schema infers the structure of a JSON document by looking at the types of an example document. Consider the document

{
  "age": 25,
  "name": "Ben"
}

When interpreted with quick-schema, this document describes a schema that expects a top level object with two keys, one named age that should have a number value and one named name that should have a text value. The actual values of the keys are used only to determine the type and to give an example of intended use, but do not have a specific meaning here.

[
  {
    "age": 25,
    "name": "Ben"
  },
  {
    "street": "Prospect Street",
    "number": 54,
    "city": "Cambridge"
  }
]

Multiple values in lists in quick-schema give the possibility for having different subvalues. Every item in the value list must match one of the of the schemas in the schema list.

Optional values are specific by adding a ? to the end of a key, and exact values are specified by adding a =.

For example, we could encode a tagged union type:

[
  {
    "type=": "Person",
    "data":
      {
        "age": 25,
        "name": "Ben"
      }
  },
  {
    "type=": "Address",
    "data":
      {
        "street": "Prospect Street",
        "number": 54,
        "city": "Cambridge"
      }
  }
]