JSON
is a JSON data type, parser, and serializer for Carp.
Installation
(load "git@github.com:carpentry-org/json@0.2.1")
Usage
; Parse JSON
(match (JSON.parse "{\"name\": \"carp\"}")
(Result.Success j) (println* &j)
(Result.Error e) (IO.errorln &(JSON.parse-error-str &e)))
; Build JSON
(def j (JSON.obj [(JSON.entry @"name" (JSON.Str @"carp"))
(JSON.entry @"version" (JSON.Num 1.0))]))
; Access values
(JSON.get &j "name") ; => (Maybe.Just (JSON.Str "carp"))
; Convert native values via to-json
(to-json @"hello") ; => (JSON.Str "hello")
ParseError
Module
wraps a ParseErrorKind together with the byte position
in the input where the error was detected.
ParseErrorKind
Module
describes the cause of a parse failure.
The associated ParseError carries this together with the byte position
where the error was detected.
SerializeError
Module
describes the cause of a serialization failure.
NonFiniteNumber is emitted when a JSON.Num contains NaN or infinity,
neither of which is representable in JSON.
as-arr
(Fn [(Ref JSON a)] (Maybe (Array (Box JSON))))
(as-arr j)
extracts a copy of the array value, or Nothing.
as-bool
(Fn [(Ref JSON a)] (Maybe Bool))
(as-bool j)
extracts the boolean value, or Nothing if not a bool.
as-num
(Fn [(Ref JSON a)] (Maybe Double))
(as-num j)
extracts the numeric value, or Nothing if not a number.
as-obj
(Fn [(Ref JSON a)] (Maybe (Map String (Box JSON))))
(as-obj j)
extracts a copy of the object map, or Nothing.
as-str
(Fn [(Ref JSON a)] (Maybe String))
(as-str j)
extracts a copy of the string value, or Nothing.
entry
(Fn [a, b] (Pair a (Box b)))
(entry k v)
creates a key-value pair for use with obj. The value is
automatically boxed.
get
(Fn [(Ref JSON a), (Ref String a)] (Maybe JSON))
(get j k)
looks up a key in a JSON object. Returns Nothing if the value is
not an object or the key is absent. Returns a copy of the value.
get-in
(Fn [(Ref JSON a), (Ref (Array String) b)] (Maybe JSON))
(get-in j keys)
performs nested key lookup through objects. Returns a copy.
(JSON.get-in &j &[@"data" @"users"])
nth
(Fn [(Ref JSON a), Int] (Maybe JSON))
(nth j i)
indexes into a JSON array. Returns Nothing if the value is not an
array or the index is out of bounds. Returns a copy of the value.
obj
(Fn [(Array (Pair String (Box JSON)))] JSON)
(obj entries)
builds a JSON object from an array of key-value pairs.
(JSON.obj [(JSON.entry @"a" (JSON.Num 1.0))
(JSON.entry @"b" (JSON.Bool true))])
parse
(Fn [(Ref String a)] (Result JSON JSON.ParseError))
(parse s)
parses a JSON value from a string.
Returns a (Result JSON ParseError) -- a Success with the parsed value,
or an Error carrying the failure kind and the byte position where it
was detected. Use JSON.parse-error-str to format the error for display.
parse-error-kind-str
(Fn [(Ref JSON.ParseErrorKind a)] String)
(parse-error-kind-str k)
formats a ParseErrorKind as a human-readable
message, without position information.
parse-error-str
(Fn [(Ref JSON.ParseError a)] String)
(parse-error-str e)
formats a ParseError as a human-readable message
including the byte position where the error was detected.
serialize-error-str
(Fn [(Ref JSON.SerializeError a)] String)
(serialize-error-str e)
formats a SerializeError as a human-readable
message.
str
(Fn [(Ref JSON a)] (Result String JSON.SerializeError))
(str j)
serializes a JSON value to its string representation.
Returns a (Result String SerializeError). Errors are returned only when
a JSON.Num contains NaN or infinity, neither of which is representable
in JSON.
Produces compact output with no extra whitespace.