| Copyright | (c) Edward Kmett 2013-2019 (c) Paul Wilson 2012 |
|---|---|
| License | BSD3 |
| Maintainer | Edward Kmett <ekmett@gmail.com> |
| Stability | experimental |
| Portability | non-portable |
| Safe Haskell | Trustworthy |
| Language | Haskell2010 |
Data.Aeson.Lens
Synopsis
- class AsNumber t where
- _Integral :: (AsNumber t, Integral a) => Prism' t a
- nonNull :: Prism' Value Value
- class AsNumber t => AsValue t where
- key :: AsValue t => Key -> Traversal' t Value
- atKey :: AsValue t => Key -> Traversal' t (Maybe Value)
- members :: AsValue t => IndexedTraversal' Key t Value
- nth :: AsValue t => Int -> Traversal' t Value
- values :: AsValue t => IndexedTraversal' Int t Value
- class IsKey t where
- class AsJSON t where
- _JSON' :: (AsJSON t, FromJSON a, ToJSON a) => Prism' t a
- pattern JSON :: (FromJSON a, ToJSON a, AsJSON t) => a -> t
- pattern Value_ :: (FromJSON a, ToJSON a) => a -> Value
- pattern Number_ :: AsNumber t => Scientific -> t
- pattern Double :: AsNumber t => Double -> t
- pattern Integer :: AsNumber t => Integer -> t
- pattern Integral :: (AsNumber t, Integral a) => a -> t
- pattern Bool_ :: AsValue t => Bool -> t
- pattern String_ :: AsValue t => Text -> t
- pattern Null_ :: AsValue t => t
- pattern Key_ :: IsKey t => Key -> t
Numbers
Minimal complete definition
Nothing
Methods
_Number :: Prism' t Scientific #
>>>"[1, \"x\"]" ^? nth 0 . _NumberJust 1.0
>>>"[1, \"x\"]" ^? nth 1 . _NumberNothing
default _Number :: AsValue t => Prism' t Scientific #
Prism into an Double over a Value or Scientific
>>>"[10.2]" ^? nth 0 . _DoubleJust 10.2
_Integer :: Prism' t Integer #
Prism into an Integer over a Value or Scientific
>>>"[10]" ^? nth 0 . _IntegerJust 10
>>>"[10.5]" ^? nth 0 . _IntegerJust 10
>>>"42" ^? _IntegerJust 42
Instances
| AsNumber Value # | |
| AsNumber ByteString # | |
Defined in Data.Aeson.Lens | |
| AsNumber ByteString # | |
Defined in Data.Aeson.Lens | |
| AsNumber Scientific # | |
Defined in Data.Aeson.Lens | |
| AsNumber Text # | |
| AsNumber Text # | |
| AsNumber String # | |
_Integral :: (AsNumber t, Integral a) => Prism' t a #
Access Integer Values as Integrals.
>>>"[10]" ^? nth 0 . _IntegralJust 10
>>>"[10.5]" ^? nth 0 . _IntegralJust 10
nonNull :: Prism' Value Value #
Prism 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
Objects and Arrays
class AsNumber t => AsValue t where #
Minimal complete definition
Methods
>>>preview _Value "[1,2,3]" == Just (Array (Vector.fromList [Number 1.0,Number 2.0,Number 3.0]))True
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _StringJust "xyz"
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _StringNothing
>>>_Object._Wrapped # [("key" :: Key, _String # "value")] :: String"{\"key\":\"value\"}"
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "b" . _BoolJust True
>>>"{\"a\": \"xyz\", \"b\": true}" ^? key "a" . _BoolNothing
>>>_Bool # True :: String"true"
>>>_Bool # False :: String"false"
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "b" . _NullJust ()
>>>"{\"a\": \"xyz\", \"b\": null}" ^? key "a" . _NullNothing
>>>_Null # () :: String"null"
_Object :: Prism' t (KeyMap Value) #
>>>"{\"a\": {}, \"b\": null}" ^? key "a" . _ObjectJust (fromList [])
>>>"{\"a\": {}, \"b\": null}" ^? key "b" . _ObjectNothing
>>>_Object._Wrapped # [("key" :: Key, _String # "value")] :: String"{\"key\":\"value\"}"
_Array :: Prism' t (Vector Value) #
>>>preview _Array "[1,2,3]" == Just (Vector.fromList [Number 1.0,Number 2.0,Number 3.0])True
Instances
| AsValue Value # | |
| AsValue ByteString # | |
Defined in Data.Aeson.Lens Methods _Value :: Prism' ByteString Value # _String :: Prism' ByteString Text # _Bool :: Prism' ByteString Bool # _Null :: Prism' ByteString () # _Object :: Prism' ByteString (KeyMap Value) # _Array :: Prism' ByteString (Vector Value) # | |
| AsValue ByteString # | |
Defined in Data.Aeson.Lens Methods _Value :: Prism' ByteString Value # _String :: Prism' ByteString Text # _Bool :: Prism' ByteString Bool # _Null :: Prism' ByteString () # _Object :: Prism' ByteString (KeyMap Value) # _Array :: Prism' ByteString (Vector Value) # | |
| AsValue Text # | |
| AsValue Text # | |
| AsValue String # | |
members :: AsValue t => IndexedTraversal' Key t Value #
An indexed Traversal into Object properties
>>>Data.List.sort ("{\"a\": 4, \"b\": 7}" ^@.. members . _Number)[("a",4.0),("b",7.0)]
>>>"{\"a\": 4}" & members . _Number *~ 10"{\"a\":40}"
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 => IndexedTraversal' Int t Value #
An indexed 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]"
Methods
_Key is an Iso from something to a Key. This is primarily intended
for situations where one wishes to use object keys that are not string
literals and therefore must be converted:
>>>let k = "a" :: Text>>>"{\"a\": 100, \"b\": 200}" ^? key (k ^. _Key)Just (Number 100.0)
Note that applying _Key directly to a string literal
(e.g., "a" ^. ) will likely not typecheck when
_KeyOverloadedStrings is enabled.
Instances
| IsKey Key # | |
| IsKey ByteString # | This instance assumes that you are dealing with UTF-8–encoded
|
Defined in Data.Aeson.Lens Methods _Key :: Iso' ByteString Key # | |
| IsKey ByteString # | This instance assumes that you are dealing with UTF-8–encoded
|
Defined in Data.Aeson.Lens Methods _Key :: Iso' ByteString Key # | |
| IsKey Text # | |
| IsKey Text # | |
| IsKey ShortText # | |
| IsKey String # | |
Decoding
Methods
Instances
| AsJSON Value # | |
| AsJSON ByteString # | |
Defined in Data.Aeson.Lens Methods _JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b # | |
| AsJSON ByteString # | |
Defined in Data.Aeson.Lens Methods _JSON :: (FromJSON a, ToJSON b) => Prism ByteString ByteString a b # | |
| AsJSON Text # | |
| AsJSON Text # | |
| AsJSON String # | |
Pattern Synonyms
pattern Number_ :: AsNumber t => Scientific -> t #