You are currently looking at the v9.1 - v10.1 docs (Reason v3.6 syntax edition). You can find the latest API docs here.
Json
Provide utilities for JSON.
t
REStype t
The JSON data structure.
kind
REStype rec kind<'a> =
| String: kind<Js_string.t>
| Number: kind<float>
| Object: kind<Js_dict.t<t>>
| Array: kind<array<t>>
| Boolean: kind<bool>
| Null: kind<Js_types.null_val>
Underlying type of a JSON value.
tagged_t
REStype tagged_t =
| JSONFalse
| JSONTrue
| JSONNull
| JSONString(string)
| JSONNumber(float)
| JSONObject(Js_dict.t<t>)
| JSONArray(array<t>)
classify
RESlet classify: t => tagged_t
test
RESlet test: ('a, kind<'b>) => bool
test(v, kind) returns true if v is of kind.
decodeString
RESlet decodeString: t => option<Js_string.t>
decodeString(json) returns Some(s) if json is a string, None otherwise.
decodeNumber
RESlet decodeNumber: t => option<float>
decodeNumber(json) returns Some(n) if json is a number, None otherwise.
decodeObject
RESlet decodeObject: t => option<Js_dict.t<t>>
decodeObject(json) returns Some(o) if json is an object, None otherwise.
decodeArray
RESlet decodeArray: t => option<array<t>>
decodeArray(json) returns Some(a) if json is an array, None otherwise.
decodeBoolean
RESlet decodeBoolean: t => option<bool>
decodeBoolean(json) returns Some(b) if json is a boolean, None otherwise.
decodeNull
RESlet decodeNull: t => option<Js_null.t<'a>>
decodeNull(json) returns Some(null) if json is a null, None otherwise.
null
RESlet null: t
null is the singleton null JSON value.
string
RESlet string: string => t
string(s) makes a JSON string of the string s.
number
RESlet number: float => t
number(n) makes a JSON number of the float n.
boolean
RESlet boolean: bool => t
boolean(b) makes a JSON boolean of the bool b.
object_
RESlet object_: Js_dict.t<t> => t
object_(dict) makes a JSON object of the Js.Dict.t dict.
array
RESlet array: array<t> => t
array_(a) makes a JSON array of the Js.Json.t array a.
stringArray
RESlet stringArray: array<string> => t
stringArray(a) makes a JSON array of the string array a.
numberArray
RESlet numberArray: array<float> => t
numberArray(a) makes a JSON array of the float array a.
booleanArray
RESlet booleanArray: array<bool> => t
booleanArray(a) makes a JSON array of the bool array a.
objectArray
RESlet objectArray: array<Js_dict.t<t>> => t
objectArray(a) makes a JSON array of the JsDict.tarraya`.
parseExn
RESlet parseExn: string => t
parseExn(s) parses the string s into a JSON data structure.
Returns a JSON data structure.
Raises SyntaxError if the given string is not a valid JSON. Note: SyntaxError is a JavaScript exception.
RES/* parse a simple JSON string */
let json = try Js.Json.parseExn(` "hello" `) catch {
| _ => failwith("Error parsing JSON string")
}
switch Js.Json.classify(json) {
| Js.Json.JSONString(value) => Js.log(value)
| _ => failwith("Expected a string")
}
RES/* parse a complex JSON string */
let getIds = s => {
let json = try Js.Json.parseExn(s) catch {
| _ => failwith("Error parsing JSON string")
}
switch Js.Json.classify(json) {
| Js.Json.JSONObject(value) =>
/* In this branch, compiler infer value : Js.Json.t Js.Dict.t */
switch Js.Dict.get(value, "ids") {
| Some(ids) =>
switch Js.Json.classify(ids) {
| Js.Json.JSONArray(ids) => /* In this branch compiler infer ids : Js.Json.t array */
ids
| _ => failwith("Expected an array")
}
| None => failwith("Expected an `ids` property")
}
| _ => failwith("Expected an object")
}
}
/* prints `1, 2, 3` */
Js.log(getIds(` { "ids" : [1, 2, 3 ] } `))
stringify
RESlet stringify: t => string
stringify(json) formats the JSON data structure as a string.
Returns the string representation of a given JSON data structure.
RES/* Creates and stringifies a simple JS object */
{
let dict = Js.Dict.empty()
Js.Dict.set(dict, "name", Js.Json.string("John Doe"))
Js.Dict.set(dict, "age", Js.Json.number(30.0))
Js.Dict.set(dict, "likes", Js.Json.stringArray(["bucklescript", "ocaml", "js"]))
Js.log(Js.Json.stringify(Js.Json.object_(dict)))
}
stringifyWithSpace
RESlet stringifyWithSpace: (t, int) => string
stringify(json) formats the JSON data structure as a string.
Returns the string representation of a given JSON data structure with spacing.
RES/* Creates and stringifies a simple JS object with spacing */
{
let dict = Js.Dict.empty()
Js.Dict.set(dict, "name", Js.Json.string("John Doe"))
Js.Dict.set(dict, "age", Js.Json.number(30.0))
Js.Dict.set(dict, "likes", Js.Json.stringArray(["bucklescript", "ocaml", "js"]))
Js.log(Js.Json.stringifyWithSpace(Js.Json.object_(dict), 2))
}
stringifyAny
RESlet stringifyAny: 'a => option<string>
stringifyAny(value) formats any value into a JSON string.
RES/* prints `["hello", "world"]` */
Js.log(Js.Json.stringifyAny(["hello", "world"]))