BSD-3-Clause licensed by Silk. B.V.
Maintained by [email protected]
This version can be pinned in stack with:aeson-utils-,958

Module documentation for


Build Status

A small package containing helpful addititions to aeson.

It provides eitherDecodeV and decodeV functions (analogous to eitherDecode and decode in aeson) that can be used to parse atomic JSON values at the top level. This is not strictly valid JSON, only objects and arrays are allowed at the top level in the specification, but aeson’s encode allows this already. This gives us the nice property decodeV . encode = Just.

The package also contains the .=? operator that you can use to optionally construct object pairs:

object (
  [ "a" .= foo
  , "b" .= bar
  ] ++ catMaybes
  [ "c" .=? mBaz
  , "d" .=? mQux

Finally it has a parseNumber function that converts a scientific into Either Integer Double in case you want to distinguish between integrals and fractionals.

Installation instructions

aeson-utils is available on hackage

cabal install aeson-utils



  • Allow aeson 0.9.*. Because of the aeson release eitherDecodeV and decodeV now behave the same as eitherDecode and decode respectively, this package can still be used as a compatibility layer.

  • Allow attoparsec 0.13.*


  • The semantics of eitherDecodeV and decodeV have been changed to conform to aeson’s eitherDecode and decode: They now consume until end of input and strip trailing whitespace.

    This is necessary to remove ambiguity when decoding JSON-like values that are not necessarily properly formatted for JSON. For example, parsing a hexadecimal digit sequence that starts with digits but does not have double quotes should fail to parse rather than be interpreted as a number.

  • Allow attoparsec 0.12.*

  • Deprecate parseNumber in favor of Data.Scientific.floatingOrInteger
  • Re-export Data.Scientific.floatingOrInteger

  • Allow scientific 0.3.*