aeson-lens-0.1.0.2: Lens of Aeson

Safe HaskellNone

Data.Aeson.Lens

Synopsis

Documentation

data ValueIx Source

Constructors

ArrIx Int 
ObjIx Text 

arr :: (ToJSON v, FromJSON v) => Int -> SimpleIndexedLens ValueIx (Maybe Value) (Maybe v)Source

Lens of Array

>>> L.unpack $ encode v
"{\"bar\":[123,false,null],\"foo\":{\"baz\":3.14}}"
>>> v ^. obj (T.pack "bar") . arr 1 :: Maybe Bool
Just False
>>> v ^. obj (T.pack "bar") . arr 1 :: Maybe String
Nothing
>>> v ^. obj (T.pack "bar") . arr 3 :: Maybe Value
Nothing
>>> v ^. arr 0 :: Maybe Value
Nothing
>>> let x = arr 0 .~ Just 1 $ Nothing
>>> L.unpack $ encode x
"[1]"
>>> let y = arr 1 .~ Just "hoge" $ x
>>> L.unpack $ encode y
"[1,\"hoge\"]"
>>> let z = arr 0 .~ Just False $ y
>>> L.unpack $ encode z
"[false,\"hoge\"]"

obj :: (ToJSON v, FromJSON v) => Text -> SimpleIndexedLens ValueIx (Maybe Value) (Maybe v)Source

Lens of Object

>>> v ^. obj (T.pack "foo") . obj (T.pack "baz") :: Maybe Double
Just 3.14
>>> v ^. obj (T.pack "foo") . obj (T.pack "baz") :: Maybe Object
Nothing
>>> v ^. obj (T.pack "foo") . obj (T.pack "hoge") :: Maybe Value
Nothing
>>> v ^. obj (T.pack "hoge") :: Maybe Value
Nothing
>>> let w = obj (T.pack "a") .~ Just 2.23 $ Nothing
>>> L.unpack $ encode w
"{\"a\":2.23}"
>>> let x = obj (T.pack "b") . obj (T.pack "c") .~ Just True $ w
>>> L.unpack $ encode x
"{\"b\":{\"c\":true},\"a\":2.23}"