MyNixOS website logo
Description

Quick JSON extractions with Aeson.

Small DSL on top of Aeson for casual and concise JSON construction and deconstruction.

aeson-quick

hackage ci

aeson-quick is a small DSL on top of aeson for casual and concise JSON construction and deconstruction.

In essence, it allows you to remove the Objects in a json Value using a simple key lookup syntax, so that the FromJSON typeclass can do the rest of the work, and it can go the other way, too.

aeson-quick structures can be defined using the fromString instance, or using the QuasiQuoter quick for compile time validation, ie: [quick|{foo}|].

Syntax

Transformations

OperationJson ValueQuick expression    Haskell type
Parse any value*.a
Key lookup{"foo": *}{foo}a
Optional key{}{foo?}Maybe a
Multiple keys{"foo": *, "bar": *}{foo,bar}(a, b)
Nested object{"foo": {"bar": *}}{foo:{bar}}b
Complex object[{"foo": *, "bar": [*, *]}][{a,b:[.]}][(a, [c])]
Array[*, *][.][a]
Array lookup (deconstruct only)[*, *][.]1a
Array range (deconstruct only)[*, *][.]1-[a]

Examples:

Deconstruction:

> let value = [jsonlit|{"foo": true, "bar": [0, 1], "baz": [{"foo": true}, {}, {"foo": false}]}|]

> value .! "{foo}" :: Bool
True

> value .! "{foo, bar}" :: (Bool, [Int])
(True, [0, 1])

> value .! "{baz:[{foo?}]}" :: [Maybe Bool]
[Just True, Nothing, Just False]

-- value is [1,2,3]
> value .! "[.]1" :: Int
2
> value .! "[.]1-" :: [Int]
[2,3]
> value .! "[.]0-2" :: [Int]
[1,2]
> value .! "[.]4" :: Maybe Int
Nothing

Construction:


> "." .% True
true

> "{foo}" .% True
{"foo": true}

> "[{foo}]" .% [1,2,3]
[{"foo":1},{"foo":2},{"foo":3}]

> "{foo:[{bar?}]}" .% [Just 1, Nothing]
{"foo":[{"bar":1},{}]}

Performance

Performance is extremely similar to using Aeson functions directly. See Writeup.md for more details.

Metadata

Version

0.2.0

Platforms (75)

    Darwin
    FreeBSD 13
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd13
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd13
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows