@hackage aeson-value-qq1.0.0

QuasiQuoter for Aeson.Value

aeson-value-qq provides a QuasiQuoter that creates aeson Values using JSON-like syntax.
It's a sister package of aeson-match-qq

aeson-qq is a very similar package. The main differences (as far as I can say) are:

  • we use aeson-attoparsec's parsers (specifically, jstring and scientific) where possible

  • we don't support variable object keys (that is, the {$key: 42} notation); I'm not exactly opposed to that feature but I don't really like how it looks and never had the need for it. It would also require adding FromJSONKey support and I would then have to support it in aeson-match-qq as well; in the end it's just too much work, man.

  • we use ghc-hs-meta instead of haskell-src-meta to parse Haskell expressions

Syntax

Copy-pasting JSON should always work (assuming infinite RAM).
Besides that, there are syntax extensions such as:

Bare keys

It's often possible to omit quotes around keys that include neither whitespace
nor characters used as part of JSON syntax:

[qq|
  { foo: 4
  , snake-case: "hello"
  }
|]

The bare-keys support is best-effort, so if your keys are weird, err on the side of quoting them.

Comments

If for some reason you'd like to document what you're doing, you can add comments:

[qq|
  # .foo works better when it's 7 not 4
  { foo: 7
  }
|]

Interpolation

We use ghc-hs-meta to parse Haskell inside #{...} syntax.

[qq|
  { foo: #{4 + 7}
  }
|]

Note that #{...} uses the Haskell language extensions enabled in the current module.