Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data Value
- = Object !(SmallArray Member)
- | Array !(SmallArray Value)
- | String !ShortText
- | Number !Scientific
- | Null
- | True
- | False
- data Member = Member {}
- data SyntaxException
- = EmptyInput
- | ExpectedColon
- | ExpectedCommaOrRightBracket
- | ExpectedFalse
- | ExpectedNull
- | ExpectedQuote
- | ExpectedQuoteOrRightBrace
- | ExpectedTrue
- | IncompleteArray
- | IncompleteEscapeSequence
- | IncompleteObject
- | IncompleteString
- | InvalidEscapeSequence
- | InvalidLeader
- | InvalidNumber
- | LeadingZero
- | UnexpectedLeftovers
- | PossibleOverflow
- class ToValue a where
- decode :: Bytes -> Either SyntaxException Value
- decodeNewlineDelimited :: Bytes -> Either SyntaxException (SmallArray Value)
- encode :: Value -> Builder
- toChunks :: Value -> Chunks
- toShortText :: Value -> ShortText
- toText :: Value -> Text
- toBytes :: Value -> Bytes
- toByteArray :: Value -> ByteArray
- pattern (:->) :: ShortText -> Value -> Member
- emptyArray :: Value
- emptyObject :: Value
- int :: Int -> Value
- int8 :: Int8 -> Value
- int16 :: Int16 -> Value
- int32 :: Int32 -> Value
- int64 :: Int64 -> Value
- word8 :: Word8 -> Value
- word16 :: Word16 -> Value
- word32 :: Word32 -> Value
- word64 :: Word64 -> Value
- bool :: Bool -> Value
- text :: Text -> Value
- shortText :: ShortText -> Value
- arrayFromList :: [Value] -> Value
- objectFromList :: [Member] -> Value
- object1 :: Member -> Value
- object2 :: Member -> Member -> Value
- object3 :: Member -> Member -> Member -> Value
- object4 :: Member -> Member -> Member -> Member -> Value
- object5 :: Member -> Member -> Member -> Member -> Member -> Value
- object6 :: Member -> Member -> Member -> Member -> Member -> Member -> Value
- object7 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object8 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object9 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object10 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object11 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object12 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object13 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object14 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object15 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
- object16 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value
Types
The JSON syntax tree described by the ABNF in RFC 7159. Notable design decisions include:
True
andFalse
are their own data constructors rather than being lumped together under a data constructor for boolean values. This improves performance when decoding the syntax tree to aBool
.Object
uses an association list rather than a hash map. This is the data type that key-value pairs can be parsed into most cheaply.Object
andArray
both useChunks
rather than usingSmallArray
or cons-list directly. This a middle ground between those two types. We get the efficent use of cache lines thatSmallArray
offers, and we get the worst-caseO(1)
appends that cons-list offers. Users will typically fold over the elements with theFoldable
instance ofChunks
, although there are functions inData.Chunks
that efficently perform other operations.
Object !(SmallArray Member) | |
Array !(SmallArray Value) | |
String !ShortText | |
Number !Scientific | |
Null | |
True | |
False |
A key-value pair in a JSON object. The name of this type is taken from section 4 of RFC 7159.
data SyntaxException Source #
Exceptions that can happen while parsing JSON. Do not pattern match on values of this type. New data constructors may be added at any time without a major version bump.
Instances
Exception SyntaxException Source # | |
Defined in Json | |
Show SyntaxException Source # | |
Defined in Json showsPrec :: Int -> SyntaxException -> ShowS # show :: SyntaxException -> String # showList :: [SyntaxException] -> ShowS # | |
Eq SyntaxException Source # | |
Defined in Json (==) :: SyntaxException -> SyntaxException -> Bool # (/=) :: SyntaxException -> SyntaxException -> Bool # |
Classes
class ToValue a where Source #
Typeclass for types that can be encoded as JSON.
Instances
ToValue Int16 Source # | |
ToValue Int32 Source # | |
ToValue Int64 Source # | |
ToValue Int8 Source # | |
ToValue Word16 Source # | |
ToValue Word32 Source # | |
ToValue Word64 Source # | |
ToValue Word8 Source # | |
ToValue Value Source # | |
ToValue Scientific Source # | |
ToValue Text Source # | |
ToValue ShortText Source # | |
ToValue () Source # | Encodes the unit value as JSON |
ToValue Bool Source # | |
ToValue Int Source # | |
ToValue Word Source # | |
ToValue a => ToValue (Array a) Source # | |
(Prim a, ToValue a) => ToValue (PrimArray a) Source # | |
ToValue a => ToValue (SmallArray a) Source # | |
ToValue a => ToValue [a] Source # | |
Functions
decode :: Bytes -> Either SyntaxException Value Source #
Decode a JSON syntax tree from a byte sequence.
decodeNewlineDelimited :: Bytes -> Either SyntaxException (SmallArray Value) Source #
Decode newline-delimited JSON. Both the LF and the CRLF conventions are supported. The newline character (or character sequence) following the final object may be omitted. This also allows blanks lines consisting of only whitespace.
It's not strictly necessary for this to be a part of this library, but newline-delimited JSON is somewhat common in practice. It's nice to have this here instead of having to reimplement it in a bunch of different applications.
Note: To protect against malicious input, this reject byte sequences with more than 10 million newlines. If this is causing a problem for you, open an issue.
Other note: in the future, this function might be changed transparently to parallelize the decoding of large input (at least 1000 lines) with GHC sparks.
toShortText :: Value -> ShortText Source #
toByteArray :: Value -> ByteArray Source #
Infix Synonyms
Constants
emptyArray :: Value Source #
An array with no elements (i.e. []
)
emptyObject :: Value Source #
An object with no members (i.e. {}
)
Value Construction
Array Construction
arrayFromList :: [Value] -> Value Source #
Construct a JSON array from a list of JSON values.
Unlike objectFromList
, this is not currently equipped with a
rewrite rule.
Object Construction
objectFromList :: [Member] -> Value Source #
Construct a JSON object from a list of members.
Note: When the argument is a list literal with 16 or fewer elements,
a rewrite rule transforms this into the appropriate objectN
function.
When the argument is not a list literal, this function just calls
smallArrayFromList
on the members, which has poor performance.
object4 :: Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with four members.
object5 :: Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with five members.
object6 :: Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with six members.
object7 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with seven members.
object8 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with nine members.
object9 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with nine members.
object10 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with ten members.
object11 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with eleven members.
object12 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with twelve members.
object13 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with thirteen members.
object14 :: Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Member -> Value Source #
Construct a JSON object with fourteen members.