Copyright | (c) Colin Woodbury 2015-2022 (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012 |
---|---|
License | BSD3 |
Maintainer | Colin Woodbury <colingw@gmail.com> |
Safe Haskell | None |
Language | Haskell2010 |
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
- class AsNumber t where
- _Number :: Traversal' t Scientific
- _Double :: Traversal' t Double
- _Integer :: Traversal' t Integer
- _Integral :: (AsNumber t, Integral a) => Traversal' t a
- nonNull :: Traversal' Value Value
- class AsNumber t => AsValue t where
- _Value :: Traversal' t Value
- _String :: Traversal' t Text
- _Bool :: Traversal' t Bool
- _Null :: Traversal' t ()
- _Object :: Traversal' t (KeyMap Value)
- _Array :: Traversal' t (Vector Value)
- key :: AsValue t => Key -> Traversal' t Value
- members :: AsValue t => Traversal' t Value
- nth :: AsValue t => Int -> Traversal' t Value
- values :: AsValue t => Traversal' t Value
- class AsJSON t where
- _JSON :: (FromJSON a, ToJSON a) => Traversal' t a
Numbers
class AsNumber t where Source #
Traverse into various number types.
Nothing
_Number :: Traversal' t Scientific Source #
>>>
"[1, \"x\"]" ^? nth 0 . _Number
Just 1.0
>>>
"[1, \"x\"]" ^? nth 1 . _Number
Nothing
default _Number :: AsValue t => Traversal' t Scientific Source #
_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
AsNumber String Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber ByteString Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber ByteString Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber Scientific Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber Text Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber Value Source # | |
Defined in Lens.Micro.Aeson | |
AsNumber Text Source # | |
Defined in Lens.Micro.Aeson |
_Integral :: (AsNumber t, Integral a) => Traversal' t a Source #
Access Integer Value
s 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.
_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
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
Traverse into actual encoded JSON.
Instances
AsJSON String Source # | |
Defined in Lens.Micro.Aeson | |
AsJSON ByteString Source # | |
Defined in Lens.Micro.Aeson _JSON :: (FromJSON a, ToJSON a) => Traversal' ByteString a Source # | |
AsJSON ByteString Source # | |
Defined in Lens.Micro.Aeson _JSON :: (FromJSON a, ToJSON a) => Traversal' ByteString a Source # | |
AsJSON Text Source # | |
Defined in Lens.Micro.Aeson | |
AsJSON Value Source # | |
Defined in Lens.Micro.Aeson | |
AsJSON Text Source # | |
Defined in Lens.Micro.Aeson |