Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Ppx deriver for serializing OCaml value to Json

The deriver is provided by the js_of_ocaml-ppx_deriving_json opam package.

The serialisation format follows js_of_ocaml's internal memory representation of OCaml values. It is not meant to be used to interact with 3rd party system. In practice, it can be used to exchange data between a js_of_ocaml program and a server side OCaml application.

The serialisation format allows a js_of_ocaml program to encode/decode OCaml value efficiently by leveraging JavaScript native Json support. See [Js_of_ocaml.Json.output] and [Js_of_ocaml.Json.output].


Generate serialisation from type definitions

One can derive serialisation functions from type definitions using the [@@deriving ..] attribute.

Note that for types named [t], we omit the "t_" prefix when naming generated functions.

type t = A | B
[@@deriving json]

val of_json : Deriving_Json_lexer.lexbuf -> t = <fun>
val to_json : Buffer.t -> t -> unit = <fun>
val json : t Deriving_Json.t = <abstr>

type u = A | B
[@@deriving json]

val u_of_json : Deriving_Json_lexer.lexbuf -> t = <fun>
val u_to_json : Buffer.t -> t -> unit = <fun>
val u_json : t Deriving_Json.t = <abstr>

Generate serialisation from types

One can generate an expression to serialise/deserialise value of an arbitrary type with the following syntax:

let (_ : t Deriving_json.t) = [%json: t]

let (_ : string -> t) = [%of_json: t]

let (_ : t -> string) = [%to_json: t]