json-schema

Types and type classes for defining JSON schemas.

Latest on Hackage:0.7.4.2[email protected]:1

See all snapshots json-schema appears in

BSD-3-Clause licensed by Silk
Maintained by [email protected]

Module documentation for 0.7.3.0

This version can be pinned in stack with:[email protected]:7e2a495b0e619886e9cfc353c2dbebafa9f7bf03727a92f18332b6c9c5adfa52,2029
  • Data
    • Data.JSON
      • Data.JSON.Schema
        • Data.JSON.Schema.Combinators
        • Data.JSON.Schema.Generic
        • Data.JSON.Schema.Types
        • Data.JSON.Schema.Validate

json-schema

Build Status

json-schema is like XML schemas, but for JSON.

The package provides

  • An AST type Schema defining the structure of a JSON object.
  • A type class JSONSchema to define a schema for a type.
  • Combinators for defining schemas.
  • A module for validating Aeson values against schemas.
  • Built-in instances matching aeson’s.
  • A Generics module matching aeson instances generated by generics-aeson

If you use another library for generating JSON instances (such as aeson’s built-in generics/template haskell) or write aeson instances by hand you will not get matching JSONSchema instances if you use json-schema’s generics module.

This package assumes that your ToJSON and FromJSON instances match.

Installation

This package is available on hackage

$ cabal install json-schema

Examples

see the examples folder or The test suite.

Changes

Changelog

0.7.3.0

  • Add JSONSchema instances for all standard Num types and Scientific.

0.7.2.0

  • Add JSONSchema instances for Double, Float, Fixed

0.7.1.1

  • Allow generic-deriving 1.7.*

0.7.1.0

  • Export GJSONSchema type to allow clients to write type signatures for gSchema and gSchemaWithSettings.

0.7.0.2

  • Allow time 1.5.*

0.7.0.1

  • Drop support for old tasty versions

0.7.0.0

  • Removed the Null constructor from Schema, use Data.JSON.Schema.Combinators.nullable instead.

  • Added the Validation module that can be used to validate a json object against a schema and to get descriptive error messages.

  • Updates for Maybe fixes in generic-aeson 0.2.0.0 including more thorough test cases.

0.6.1.1

  • Bugfix: Remove underscores from fields and constructors in generated schemas to match generic-aeson.

0.6.1

  • Add JSONSchema instances for tuples up to length 15 (matching aeson 0.8 instances)
  • Specify uniqueness for JSONSchema instances for Set.

0.6

Breaking changes:

  • Add Constant Aeson.Value type to Schema
  • Change Number to take a Bound for the boundary. Before this the upper bound could not be -1.
  • Change Value and Array to take a LengthBound. The difference from Number is that these values should always be >= 0 if present.

Minor:

  • Add Bound { lower :: Maybe Int, upper :: Maybe Int }
  • Add unbounded as a shorthand for a Bound without restrictions
  • Add LengthBound { lowerLength :: Maybe Int, upperLength :: Maybe Int }
  • Add unboundedLength as a shorthand for a LengthBound without restrictions
  • Add remaining JSONSchema instances based on existing Aeson instances. UTCTime, Set, Lazy Text, and tuples up to length 7.
  • Add enum combinator as a shorthand for creating a Choice of Constants

0.5

  • JSONSchema instances for Data.Vector, Data.Map, and Data.HashMap
  • Add Map type for json objects with arbitrary keys
  • Add Any type for any json value
  • Don’t generate empty field names in ojbects for constructors without labeled fields