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 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 has
generic derivation of schemas that match the generic-aeson format.