Js.JsonUtility functions to manipulate JSON values
Efficient JSON encoding using JavaScript API @see <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON> MDN
val test : 'a -> 'b kind -> booltest v kind returns true if v is of kind
val decodeString : t -> string optiondecodeString json returns Some s if json is a string, None otherwise
val decodeNumber : t -> float optiondecodeNumber json returns Some n if json is a number, None otherwise
decodeObject json returns Some o if json is an object, None otherwise
decodeArray json returns Some a if json is an array, None otherwise
val decodeBoolean : t -> bool optiondecodeBoolean json returns Some b if json is a boolean, None otherwise
decodeNull json returns Some null if json is a null, None otherwise
Those functions allows the construction of an arbitrary complex JSON values.
val null : tnull is the singleton null JSON value
val string : string -> tstring s makes a JSON string of the string s
val number : float -> tnumber n makes a JSON number of the float n
val boolean : bool -> tboolean b makes a JSON boolean of the bool b
The functions below are specialized for specific array type which happened to be already JSON object in the Melange runtime. Therefore they are more efficient (constant time rather than linear conversion).
val stringArray : string array -> tstringArray a makes a JSON array of the string array a
val numberArray : float array -> tnumberArray a makes a JSON array of the float array a
val booleanArray : bool array -> tbooleanArray makes a JSON array of the bool array a
val parseExn : string -> tparseExn s parses the string s into a JSON data structure
Returns a JSON data structure
(* parse a simple JSON string *)
let json =
try
Js.Json.parseExn {| "foo" |}
with
| _ -> failwith "Error parsing JSON string"
in
match Js.Json.classify json with
| Js.Json.JSONString value -> Js.log value
| _ -> failwith "Expected a string"(* parse a complex JSON string *)
let getIds s =
let json =
try
Js.Json.parseExn s
with
| _ -> failwith "Error parsing JSON string"
in
match Js.Json.classify json with
| Js.Json.JSONObject value ->
(* In this branch, compiler infer value : Js.Json.t Js.dict *)
begin match Js.Dict.get value "ids" with
| Some ids ->
begin match Js.Json.classify ids with
| Js.Json.JSONArray ids ->
(* In this branch compiler infer ids : Js.Json.t array *)
ids
| _ -> failwith "Expected an array"
end
| None -> failwith "Expected an `ids` property"
end
| _ -> failwith "Expected an object"
(* prints `1, 2, 3` *)
let _ =
Js.log (getIds {| { "ids" : [1, 2, 3] } |})val stringify : t -> stringstringify json formats the JSON data structure as a string
Returns the string representation of a given JSON data structure
(* Creates and stringifies a simple JS object *)
let dict = Js.Dict.empty () in
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))val stringifyWithSpace : t -> int -> stringstringify json formats the JSON data structure as a string
Returns the string representation of a given JSON data structure
(* Creates and stringifies a simple JS object with spacing *)
let dict = Js.Dict.empty () in
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 value formats any value into a JSON string
(* prints ``"foo", "bar"`` *)
Js.log (Js.Json.stringifyAny [| "foo"; "bar" |])Best-effort serialization, it tries to seralize as many objects as possible and deserialize it back
It is unsafe in two aspects