jsons-to-schema alternatives and similar packages
Based on the "Data" category.
Alternatively, view jsons-to-schema alternatives based on common mentions on social networks and blogs.
-
lens
Lenses, Folds, and Traversals - Join us on web.libera.chat #haskell-lens -
semantic-source
Parsing, analyzing, and comparing source code across many languages -
text
Haskell library for space- and time-efficient operations over Unicode text. -
code-builder
Packages for defining APIs, running them, generating client code and documentation. -
unordered-containers
Efficient hashing-based container types -
compendium-client
Mu (μ) is a purely functional framework for building micro services. -
cassava
A CSV parsing and encoding library optimized for ease of use and high performance -
holmes
A reference library for constraint-solving with propagators and CDCL. -
hashable
A class for types that can be converted to a hash value -
resource-pool
A high-performance striped resource pooling implementation for Haskell -
primitive
This package provides various primitive memory-related operations. -
binary
Efficient, pure binary serialisation using ByteStrings in Haskell. -
discrimination
Fast linear time sorting and discrimination for a large class of data types -
json-autotype
Automatic Haskell type inference from JSON input -
reflection
Reifies arbitrary Haskell terms into types that can be reflected back into terms -
audiovisual
Extensible records, variants, structs, effects, tangles -
IORefCAS
A collection of different packages for CAS based data structures. -
dependent-map
Dependently-typed finite maps (partial dependent products) -
dependent-sum
Dependent sums and supporting typeclasses for comparing and displaying them -
orgmode-parse
Attoparsec parser combinators for parsing org-mode structured text! -
scientific
Arbitrary-precision floating-point numbers represented using scientific notation -
bifunctors
Haskell 98 bifunctors, bifoldables and bitraversables -
protobuf
An implementation of Google's Protocol Buffers in Haskell. -
streaming
An optimized general monad transformer for streaming applications, with a simple prelude of functions -
safecopy
An extension to Data.Serialize with built-in version control -
text-icu
This package provides the Haskell Data.Text.ICU library, for performing complex manipulation of Unicode text. -
uuid-types
A Haskell library for creating, printing and parsing UUIDs
Static code analysis for 29 languages.
Do you think we are missing an alternative of jsons-to-schema or a related project?
README
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.
Properties
The schema generator should satisfy these properties:
- An schema generated from a JSON document will always be able to validate that JSON document.
- When a schema is merged with another schema, all objects that would validate under either schema, subject to the assumptions below, will validate under the merged schema regardless of merge order.
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.
Assumptions
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
- Option to autogenerate enumerations for fields with below a certain limit of values
- Option to automatically detect ranges for integers, strings, arrays, and objects
Not Planned
- Recognition of known JSON Schema formats (UUIDs and IP addresses, for example)
- Support for JSON or JSON Schema extensions