JSON

is a JSON data type, parser, and serializer for Carp.

Installation

(load "git@github.com:carpentry-org/json@0.1.0")

Usage

; Parse JSON
(match (JSON.parse "{\"name\": \"carp\"}")
  (Result.Success j) (println* &j)
  (Result.Error e) (IO.errorln &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"))

Arr

instantiate

(Fn [(Array (Box JSON))] JSON)

creates a Arr.

Bool

instantiate

(Fn [Bool] JSON)

creates a Bool.

Null

instantiate

(Fn [] JSON)

creates a Null.

Num

instantiate

(Fn [Double] JSON)

creates a Num.

Obj

instantiate

(Fn [(Map String (Box JSON))] JSON)

creates a Obj.

Str

instantiate

(Fn [String] JSON)

creates a Str.

arr?

defn

(Fn [(Ref JSON a)] Bool)

                        (arr? j)
                    

checks whether a JSON value is an array.

as-arr

defn

(Fn [(Ref JSON a)] (Maybe (Array (Box JSON))))

                        (as-arr j)
                    

extracts a copy of the array value, or Nothing.

as-bool

defn

(Fn [(Ref JSON a)] (Maybe Bool))

                        (as-bool j)
                    

extracts the boolean value, or Nothing if not a bool.

as-num

defn

(Fn [(Ref JSON a)] (Maybe Double))

                        (as-num j)
                    

extracts the numeric value, or Nothing if not a number.

as-obj

defn

(Fn [(Ref JSON a)] (Maybe (Map String (Box JSON))))

                        (as-obj j)
                    

extracts a copy of the object map, or Nothing.

as-str

defn

(Fn [(Ref JSON a)] (Maybe String))

                        (as-str j)
                    

extracts a copy of the string value, or Nothing.

bool?

defn

(Fn [(Ref JSON a)] Bool)

                        (bool? j)
                    

checks whether a JSON value is a boolean.

copy

instantiate

(Fn [(Ref JSON a)] JSON)

copies a JSON.

delete

instantiate

(Fn [JSON] ())

deletes a JSON. This should usually not be called manually.

entry

defn

(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

defn

(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

defn

(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"])

get-tag

instantiate

(Fn [(Ref JSON a)] Int)

Gets the tag from a JSON.

nth

defn

(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.

null?

defn

(Fn [(Ref JSON a)] Bool)

                        (null? j)
                    

checks whether a JSON value is null.

num?

defn

(Fn [(Ref JSON a)] Bool)

                        (num? j)
                    

checks whether a JSON value is a number.

obj

defn

(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))])

obj?

defn

(Fn [(Ref JSON a)] Bool)

                        (obj? j)
                    

checks whether a JSON value is an object.

parse

defn

(Fn [(Ref String a)] (Result JSON String))

                        (parse s)
                    

parses a JSON value from a string.

Returns a (Result JSON String) -- a Success with the parsed value, or an Error with a message describing what went wrong.

prn

instantiate

(Fn [(Ref JSON a)] String)

converts a JSON to a string.

str

defn

(Fn [(Ref JSON a)] String)

                        (str j)
                    

serializes a JSON value to its string representation.

Produces compact output with no extra whitespace.

str?

defn

(Fn [(Ref JSON a)] Bool)

                        (str? j)
                    

checks whether a JSON value is a string.