| Copyright | (c) Colin Woodbury 2015 (c) Edward Kmett 2013-2014 (c) Paul Wilson 2012 |
|---|---|
| License | BSD3 |
| Maintainer | Colin Woodbury <colingw@gmail.com> |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
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.
- class AsNumber t where
- _Integral :: (AsNumber t, Integral a) => Traversal' t a
- nonNull :: Traversal' Value Value
- data Primitive
- = StringPrim !Text
- | NumberPrim !Scientific
- | BoolPrim !Bool
- | NullPrim
- class AsNumber t => AsPrimitive t where
- class AsPrimitive t => AsValue t where
- key :: AsValue t => Text -> 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
Numbers
Traverse into various number types.
Methods
_Number :: Traversal' t Scientific #
>>>"[1, \"x\"]" ^? nth 0 . _NumberJust 1.0
>>>"[1, \"x\"]" ^? nth 1 . _NumberNothing
_Number :: AsPrimitive t => Traversal' t Scientific #
>>>"[1, \"x\"]" ^? nth 0 . _NumberJust 1.0
>>>"[1, \"x\"]" ^? nth 1 . _NumberNothing
_Double :: Traversal' t Double #
Traversal into an Double over a Value, Primitive or Scientific
>>>"[10.2]" ^? nth 0 . _DoubleJust 10.2
_Integer :: Traversal' t Integer #
Traversal into an Integer over a Value, Primitive or Scientific
>>>"[10]" ^? nth 0 . _IntegerJust 10
>>>"[10.5]" ^? nth 0 . _IntegerJust 10
>>>"42" ^? _IntegerJust 42
_Integral :: (AsNumber t, Integral a) => Traversal' t a #
Access Integer Values as Integrals.
>>>"[10]" ^? nth 0 . _IntegralJust 10
>>>"[10.5]" ^? nth 0 . _IntegralJust 10
nonNull :: Traversal' Value Value #
Traversal into non-Null values
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "a" . nonNullJust (String "xyz")
>>>"{\"a\": {}, \"b\": null}" ^? key "a" . nonNullJust (Object (fromList []))
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "b" . nonNullNothing
Primitive
Primitives of Value
Constructors
| StringPrim !Text | |
| NumberPrim !Scientific | |
| BoolPrim !Bool | |
| NullPrim |
class AsNumber t => AsPrimitive t where #
Traverse into various JSON primatives.
Methods
_Primitive :: Traversal' t Primitive #
>>>"[1, \"x\", null, true, false]" ^? nth 0 . _PrimitiveJust (NumberPrim 1.0)
>>>"[1, \"x\", null, true, false]" ^? nth 1 . _PrimitiveJust (StringPrim "x")
>>>"[1, \"x\", null, true, false]" ^? nth 2 . _PrimitiveJust NullPrim
>>>"[1, \"x\", null, true, false]" ^? nth 3 . _PrimitiveJust (BoolPrim True)
>>>"[1, \"x\", null, true, false]" ^? nth 4 . _PrimitiveJust (BoolPrim False)
_Primitive :: AsValue t => Traversal' t Primitive #
>>>"[1, \"x\", null, true, false]" ^? nth 0 . _PrimitiveJust (NumberPrim 1.0)
>>>"[1, \"x\", null, true, false]" ^? nth 1 . _PrimitiveJust (StringPrim "x")
>>>"[1, \"x\", null, true, false]" ^? nth 2 . _PrimitiveJust NullPrim
>>>"[1, \"x\", null, true, false]" ^? nth 3 . _PrimitiveJust (BoolPrim True)
>>>"[1, \"x\", null, true, false]" ^? nth 4 . _PrimitiveJust (BoolPrim False)
_String :: Traversal' t Text #
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _StringJust "xyz"
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _StringNothing
_Bool :: Traversal' t Bool #
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _BoolJust True
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _BoolNothing
_Null :: Traversal' t () #
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _NullJust ()
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _NullNothing
Objects and Arrays
class AsPrimitive t => AsValue t where #
Traverse into JSON Objects and Arrays.
members :: AsValue t => Traversal' t Value #
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 #
Like ix, but for Arrays with Int indexes
>>>"[1,2,3]" ^? nth 1Just (Number 2.0)
>>>"{\"a\": 100, \"b\": 200}" ^? nth 1Nothing
>>>"[1,2,3]" & nth 1 .~ Number 20"[1,20,3]"
values :: AsValue t => Traversal' t Value #
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.
Methods
_JSON :: (FromJSON a, ToJSON a) => Traversal' t a #