microlens-aeson-2.5.0: Law-abiding lenses for Aeson, using microlens.
Copyright(c) Colin Woodbury 2015-2022 (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012
LicenseBSD3
MaintainerColin Woodbury <colingw@gmail.com>
Safe HaskellNone
LanguageHaskell2010

Lens.Micro.Aeson

Description

Traversals for Data.Aeson, based on microlens for minimal dependencies.

For basic manipulation of Aeson values, full Prism functionality isn't necessary. Since all Prisms are inherently Traversals, we provide Traversals that mimic the behaviour of the Prisms found in the original Data.Aeson.Lens.

Synopsis

Numbers

class AsNumber t where Source #

Traverse into various number types.

Minimal complete definition

Nothing

Methods

_Number :: Traversal' t Scientific Source #

>>> "[1, \"x\"]" ^? nth 0 . _Number
Just 1.0
>>> "[1, \"x\"]" ^? nth 1 . _Number
Nothing

_Double :: Traversal' t Double Source #

Traversal into an Double over a Value or Scientific

>>> "[10.2]" ^? nth 0 . _Double
Just 10.2

_Integer :: Traversal' t Integer Source #

Traversal into an Integer over a Value or Scientific

>>> "[10]" ^? nth 0 . _Integer
Just 10
>>> "[10.5]" ^? nth 0 . _Integer
Just 10
>>> "42" ^? _Integer
Just 42

Instances

Instances details
AsNumber String Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Scientific Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Text Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Value Source # 
Instance details

Defined in Lens.Micro.Aeson

AsNumber Text Source # 
Instance details

Defined in Lens.Micro.Aeson

_Integral :: (AsNumber t, Integral a) => Traversal' t a Source #

Access Integer Values as Integrals.

>>> "[10]" ^? nth 0 . _Integral
Just 10
>>> "[10.5]" ^? nth 0 . _Integral
Just 10

nonNull :: Traversal' Value Value Source #

Traversal into non-Null values

>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . nonNull
Just (String "xyz")
>>> "{\"a\": {}, \"b\": null}" ^? key "a" . nonNull
Just (Object (fromList []))
>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . nonNull
Nothing

Objects and Arrays

class AsNumber t => AsValue t where Source #

Traverse into JSON Objects and Arrays.

Minimal complete definition

_Value

Methods

_Value :: Traversal' t Value Source #

Traverse into data that encodes a Value

_String :: Traversal' t Text Source #

>>> "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _String
Just "xyz"
>>> "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _String
Nothing

_Bool :: Traversal' t Bool Source #

>>> "{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _Bool
Just True
>>> "{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _Bool
Nothing

_Null :: Traversal' t () Source #

>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _Null
Just ()
>>> "{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _Null
Nothing

_Object :: Traversal' t (KeyMap Value) Source #

>>> "{\"a\": {}, \"b\": null}" ^? key "a" . _Object
Just (fromList [])
>>> "{\"a\": {}, \"b\": null}" ^? key "b" . _Object
Nothing

_Array :: Traversal' t (Vector Value) Source #

Instances

Instances details
AsValue String Source # 
Instance details

Defined in Lens.Micro.Aeson

AsValue ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsValue ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsValue Text Source # 
Instance details

Defined in Lens.Micro.Aeson

AsValue Value Source # 
Instance details

Defined in Lens.Micro.Aeson

AsValue Text Source # 
Instance details

Defined in Lens.Micro.Aeson

key :: AsValue t => Key -> Traversal' t Value Source #

Like ix, but for Object with Key indices. This often has better inference than ix when used with OverloadedStrings.

>>> "{\"a\": 100, \"b\": 200}" ^? key "a"
Just (Number 100.0)
>>> "[1,2,3]" ^? key "a"
Nothing

members :: AsValue t => Traversal' t Value Source #

A Traversal into Object properties

>>> "{\"a\": 4, \"b\": 7}" ^.. members
[Number 4.0,Number 7.0]
>>> "{\"a\": 4, \"b\": 7}" & members . _Number %~ (* 10)
"{\"a\":40,\"b\":70}"

nth :: AsValue t => Int -> Traversal' t Value Source #

Like ix, but for Arrays with Int indexes

>>> "[1,2,3]" ^? nth 1
Just (Number 2.0)
>>> "{\"a\": 100, \"b\": 200}" ^? nth 1
Nothing
>>> "[1,2,3]" & nth 1 .~ Number 20
"[1,20,3]"

values :: AsValue t => Traversal' t Value Source #

A Traversal into Array elements

>>> "[1,2,3]" ^.. values
[Number 1.0,Number 2.0,Number 3.0]
>>> "[1,2,3]" & values . _Number %~ (* 10)
"[10,20,30]"

Decoding

class AsJSON t where Source #

Traverse into actual encoded JSON.

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' t a Source #

_JSON is a Traversal from something containing JSON to something encoded in that structure.

Instances

Instances details
AsJSON String Source # 
Instance details

Defined in Lens.Micro.Aeson

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' String a Source #

AsJSON ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsJSON ByteString Source # 
Instance details

Defined in Lens.Micro.Aeson

AsJSON Text Source # 
Instance details

Defined in Lens.Micro.Aeson

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' Text a Source #

AsJSON Value Source # 
Instance details

Defined in Lens.Micro.Aeson

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' Value a Source #

AsJSON Text Source # 
Instance details

Defined in Lens.Micro.Aeson

Methods

_JSON :: (FromJSON a, ToJSON a) => Traversal' Text a Source #