Copyright | (c) 2011-2016 Bryan O'Sullivan (c) 2011 MailRank Inc. |
---|---|
License | BSD3 |
Maintainer | Bryan O'Sullivan <bos@serpentine.com> |
Stability | experimental |
Portability | portable |
Safe Haskell | None |
Language | Haskell2010 |
Efficiently and correctly parse a JSON string. The string must be encoded as UTF-8.
Synopsis
- json :: Parser Value
- jsonEOF :: Parser Value
- jsonWith :: ([(Text, Value)] -> Either String Object) -> Parser Value
- jsonLast :: Parser Value
- jsonAccum :: Parser Value
- jsonNoDup :: Parser Value
- value :: Parser Value
- jstring :: Parser Text
- jstring_ :: Parser Text
- scientific :: Parser Scientific
- json' :: Parser Value
- jsonEOF' :: Parser Value
- jsonWith' :: ([(Text, Value)] -> Either String Object) -> Parser Value
- jsonLast' :: Parser Value
- jsonAccum' :: Parser Value
- jsonNoDup' :: Parser Value
- value' :: Parser Value
- decodeWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
- decodeStrictWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a
- eitherDecodeWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a
- eitherDecodeStrictWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a
- fromListAccum :: [(Text, Value)] -> Object
- parseListNoDup :: [(Text, Value)] -> Either String Object
Lazy parsers
Parse any JSON value.
The conversion of a parsed value to a Haskell value is deferred until the Haskell value is needed. This may improve performance if only a subset of the results of conversions are needed, but at a cost in thunk allocation.
This function is an alias for value
. In aeson 0.8 and earlier, it
parsed only object or array types, in conformance with the
now-obsolete RFC 4627.
Warning
If an object contains duplicate keys, only the first one will be kept.
For a more flexible alternative, see jsonWith
.
Parse a top-level JSON value followed by optional whitespace and
end-of-input. See also: json
.
jsonWith :: ([(Text, Value)] -> Either String Object) -> Parser Value #
Parse any JSON value.
This parser is parameterized by a function to construct an Object
from a raw list of key-value pairs, where duplicates are preserved.
The pairs appear in reverse order from the source.
Examples
json
keeps only the first occurence of each key, using fromList
.
json
=jsonWith
(Right
.
fromList
)
jsonLast
keeps the last occurence of each key, using
.fromListWith
(const
id
)
jsonLast
=jsonWith
(Right
.
fromListWith
(const
id
))
jsonAccum
keeps wraps all values in arrays to keep duplicates, using
fromListAccum
.
jsonAccum
=jsonWith
(Right
.fromListAccum
)
jsonNoDup
fails if any object contains duplicate keys, using parseListNoDup
.
jsonNoDup
=jsonWith
parseListNoDup
scientific :: Parser Scientific #
Parse a JSON number.
Strict parsers
Parse any JSON value.
This is a strict version of json
which avoids building up thunks
during parsing; it performs all conversions immediately. Prefer
this version if most of the JSON data needs to be accessed.
This function is an alias for value'
. In aeson 0.8 and earlier, it
parsed only object or array types, in conformance with the
now-obsolete RFC 4627.
Warning
If an object contains duplicate keys, only the first one will be kept.
For a more flexible alternative, see jsonWith'
.
Parse a top-level JSON value followed by optional whitespace and
end-of-input. See also: json'
.
jsonAccum' :: Parser Value #
jsonNoDup' :: Parser Value #
Variant of json'
which fails if any object contains duplicate keys.
Helpers
decodeWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a #
decodeStrictWith :: Parser Value -> (Value -> Result a) -> ByteString -> Maybe a #
eitherDecodeWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a #
eitherDecodeStrictWith :: Parser Value -> (Value -> IResult a) -> ByteString -> Either (JSONPath, String) a #
Handling objects with duplicate keys
fromListAccum :: [(Text, Value)] -> Object #
is an object mapping keys to arrays containing all
associated values from the original list fromListAccum
kvskvs
.
>>>
fromListAccum [("apple", Bool True), ("apple", Bool False), ("orange", Bool False)]
fromList [("apple",Array [Bool False,Bool True]),("orange",Array [Bool False])]