# generic-aeson
[](https://travis-ci.org/silkapp/generic-aeson)
The structure of the generated JSON is meant to be close to
idiomatic JSON. This means:
* Enumerations (data types containing constructors without fields) are converted to JSON strings.
* Record fields become JSON keys.
* Data types with one unlabeled field convert to just that field.
* Data types with multiple unlabeled fields become arrays.
* Multiple constructors are represented by keys.
* `Maybe` values are either an absent key, or the value.
* Leading and trailing underscores are removed from constructor names and record fields
See `tests/Main.hs` in [json-schema](http://hackage.haskell.org/package/json-schema) for more examples.
## How does generic-aeson compare to the TH/Generics already present in aeson?
generic-aeson contains more special cases for creating more concise
and idiomatic json. If you're working with the JSON representation
directly generic-aeson should feel more natural.
## Will the generated format ever change?
Changing the format would incur a breaking change to every API that
uses generic-aeson so we must keep it intact.
If we find a bug where the fix changes the format we need to create a
new package or version the generation code.
## Schemas
[json-schema](http://hackage.haskell.org/package/json-schema) has
generic derivation of schemas that match the generic-aeson format.