Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Aeson-compatible pretty-printing of JSON Value
s.
Synopsis
- encodePretty :: ToJSON a => a -> ByteString
- encodePrettyToTextBuilder :: ToJSON a => a -> Builder
- encodePretty' :: ToJSON a => Config -> a -> ByteString
- encodePrettyToTextBuilder' :: ToJSON a => Config -> a -> Builder
- data Config = Config {
- confIndent :: Indent
- confCompare :: Text -> Text -> Ordering
- confNumFormat :: NumberFormat
- confTrailingNewline :: Bool
- defConfig :: Config
- data Indent
- data NumberFormat
- = Generic
- | Scientific
- | Decimal
- | Custom (Scientific -> Builder)
- mempty :: Monoid a => a
- compare :: Ord a => a -> a -> Ordering
- keyOrder :: [Text] -> Text -> Text -> Ordering
Simple Pretty-Printing
encodePretty :: ToJSON a => a -> ByteString Source #
encodePrettyToTextBuilder :: ToJSON a => a -> Builder Source #
A drop-in replacement for aeson's encodeToTextBuilder
function,
producing JSON-ByteStrings for human readers.
Follows the default configuration in defConfig
.
Pretty-Printing with Configuration Options
encodePretty' :: ToJSON a => Config -> a -> ByteString Source #
A variant of encodePretty
that takes an additional configuration
parameter.
encodePrettyToTextBuilder' :: ToJSON a => Config -> a -> Builder Source #
A variant of encodeToTextBuilder
that takes an additional configuration
parameter.
Config | |
|
The default configuration: indent by four spaces per level of nesting, do not sort objects by key, do not add trailing newline.
defConfig = Config { confIndent = Spaces 4, confCompare = mempty, confNumFormat = Generic, confTrailingNewline = False }
Indentation per level of nesting.
removes all whitespace
from the output.Spaces
0
data NumberFormat Source #
Generic | The standard behaviour of the |
Scientific | Scientific notation (e.g. 2.3e123). |
Decimal | Standard decimal notation |
Custom (Scientific -> Builder) | Custom formatting function |
Sorting Keys in Objects
With the Aeson library, the order of keys in objects is undefined due to
objects being implemented as HashMaps. To allow user-specified key
orders in the pretty-printed JSON, encodePretty'
can be configured
with a comparison function. These comparison functions can be composed
using the Monoid
interface. Some other useful helper functions to keep
in mind are comparing
and on
.
Consider the following deliberately convoluted example, demonstrating the use of comparison functions:
An object might pretty-print as follows
{ "baz": ..., "bar": ..., "foo": ..., "quux": ..., }
which is clearly a confusing order of keys. By using a comparison function such as
comp :: Text -> Text -> Ordering comp = keyOrder ["foo","bar"] `mappend` comparing length
we can achieve the desired neat result:
{ "foo": ..., "bar": ..., "baz": ..., "quux": ..., }
Identity of mappend
Examples
>>>
"Hello world" <> mempty
"Hello world"
>>>
mempty <> [1, 2, 3]
[1,2,3]
Serves as an order-preserving (non-)sort function. Re-exported from Data.Monoid.
Sort keys in their natural order, i.e. by comparing character codes. Re-exported from the Prelude and Data.Ord
keyOrder :: [Text] -> Text -> Text -> Ordering Source #
Sort keys by their order of appearance in the argument list.
Keys that are not present in the argument list are considered to be greater than any key in the list and equal to all keys not in the list. I.e. keys not in the argument list are moved to the end, while their order is preserved.