You are currently looking at the < v8.2.0 docs (Reason v3.6 syntax edition). You can find the latest API docs here.
(These docs cover all versions between v3 to v8 and are equivalent to the old BuckleScript docs before the rebrand)
Json
Provide utilities for JSON.
t
REtype t;
The JSON data structure.
kind
REtype 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
REtype tagged_t =
| JSONFalse
| JSONTrue
| JSONNull
| JSONString(string)
| JSONNumber(float)
| JSONObject(Js_dict.t(t))
| JSONArray(array(t));
classify
RElet classify: t => tagged_t;
test
RElet test: ('a, kind('b)) => bool;
test(v, kind)
returns true
if v
is of kind
.
decodeString
RElet decodeString: t => option(Js_string.t);
decodeString(json)
returns Some(s)
if json
is a string
, None
otherwise.
decodeNumber
RElet decodeNumber: t => option(float);
decodeNumber(json)
returns Some(n)
if json
is a number
, None
otherwise.
decodeObject
RElet decodeObject: t => option(Js_dict.t(t));
decodeObject(json)
returns Some(o)
if json
is an object
, None
otherwise.
decodeArray
RElet decodeArray: t => option(array(t));
decodeArray(json)
returns Some(a)
if json
is an array
, None
otherwise.
decodeBoolean
RElet decodeBoolean: t => option(bool);
decodeBoolean(json)
returns Some(b)
if json
is a boolean
, None
otherwise.
decodeNull
RElet decodeNull: t => option(Js_null.t('a));
decodeNull(json)
returns Some(null)
if json
is a null
, None
otherwise.
null
RElet null: t;
null
is the singleton null JSON value.
string
RElet string: string => t;
string(s)
makes a JSON string of the string
s
.
number
RElet number: float => t;
number(n)
makes a JSON number of the float
n
.
boolean
RElet boolean: bool => t;
boolean(b)
makes a JSON boolean of the bool
b
.
object_
RElet object_: Js_dict.t(t) => t;
object_(dict)
makes a JSON object of the Js.Dict.t
dict
.
array
RElet array: array(t) => t;
array_(a)
makes a JSON array of the Js.Json.t
array a
.
stringArray
RElet stringArray: array(string) => t;
stringArray(a)
makes a JSON array of the string
array a
.
numberArray
RElet numberArray: array(float) => t;
numberArray(a)
makes a JSON array of the float
array a
.
booleanArray
RElet booleanArray: array(bool) => t;
booleanArray(a)
makes a JSON array of the bool
array a
.
objectArray
RElet objectArray: array(Js_dict.t(t)) => t;
objectArray(a) makes a JSON array of the
JsDict.tarray
a`.
parseExn
RElet 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.
RE/* parse a simple JSON string */
let json =
try (Js.Json.parseExn({| "foo" |})) {
| _ => failwith("Error parsing JSON string")
};
switch (Js.Json.classify(json)) {
| Js.Json.JSONString(value) => Js.log(value)
| _ => failwith("Expected a string")
};
RE/* parse a complex JSON string */
let getIds = s => {
let json =
try (Js.Json.parseExn(s)) {
| _ => 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
RElet stringify: t => string;
stringify(json)
formats the JSON data structure as a string
.
Returns the string representation of a given JSON data structure.
RE/* 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
RElet 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.
RE/* 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
RElet stringifyAny: 'a => option(string);
stringifyAny(value)
formats any value into a JSON string.
RE/* prints `["foo", "bar"]` */
Js.log(Js.Json.stringifyAny([|"foo", "bar"|]));