module Browse:This submodule provides some simple functions for checking and reading the structure of JSON data.sig
..end
Use open Json_type.Browse
when you want to convert JSON data
into another OCaml type.
val make_table : (string * Json_type.t) list -> (string, Json_type.t) Hashtbl.t
make_table
creates a hash table from the contents of a JSON Object
.
For example, if x
is a JSON Object
, then the corresponding table
can be created by let tbl = make_table (objekt x)
.
Hash tables are more efficient than lists if several fields must be extracted and converted into something like an OCaml record.
The key/value pairs are added from left to right.
Therefore if there are several bindings for the same key, the latest
to appear in the list will be the first in the list
returned by Hashtbl.find_all
.
val field : (string, Json_type.t) Hashtbl.t -> string -> Json_type.t
field tbl key
looks for a unique field key
in hash table tbl
.
It raises a Json_error
if key
is not found in the table
or if it is present multiple times.val fieldx : (string, Json_type.t) Hashtbl.t -> string -> Json_type.t
fieldx tbl key
works like field tbl key
, but returns Null
if
key
is not found in the table. This function is convenient when
assuming that a field which is set to Null
is the same
as if it were not defined.
For instance, optional int (fieldx tbl "year")
looks in
table tbl
for a field "year"
. If this field is set to Null
or if it is undefined, then None
is returned, otherwise
an Int
is expected and returned, for example as Some 2006
.
If the value is of another JSON type than Int
or Null
, it causes an
error.
val optfield : (string, Json_type.t) Hashtbl.t -> string -> Json_type.t option
optfield tbl key
queries hash table tbl
for zero or one field key
.
The result is returned as None
or Some result
. If there are several
fields with the same key
, then a Json_error
is produced.
Null
is returned as Some Null
, not
as None
. For other behaviors see Json_type.Browse.fieldx
and Json_type.Browse.optfieldx
.
val optfieldx : (string, Json_type.t) Hashtbl.t -> string -> Json_type.t option
optfieldx
is the same as optfield
except that it
will never return Some Null
but None
instead.val describe : Json_type.t -> string
describe x
returns a short description of the given JSON data.
Its purpose is to help build error messages.val type_mismatch : string -> Json_type.t -> 'a
type_mismatch expected x
raises the Json_error msg
exception,
where msg
is a message that describes the error as a type mismatch
between the element x
and what is expected
.val is_null : Json_type.t -> bool
val is_defined : Json_type.t -> bool
val null : Json_type.t -> unit
Json_error
exception if the given JSON value is not Null
.val string : Json_type.t -> string
Json_error
exception.val bool : Json_type.t -> bool
Json_error
exception.val number : Json_type.t -> float
Json_error
exception.val int : Json_type.t -> int
Json_error
exception.val float : Json_type.t -> float
Json_error
exception.val array : Json_type.t -> Json_type.t list
Array
and returns an OCaml list,
or raises a Json_error
exception.val objekt : Json_type.t -> (string * Json_type.t) list
Object
and returns an OCaml list,
or raises a Json_error
exception.
Note the unusual spelling. object
being
a keyword in OCaml, we use objekt
. Object
with a capital is still
spelled Object
.
val list : (Json_type.t -> 'a) -> Json_type.t -> 'a list
list f x
maps a JSON Array x
to an OCaml list,
converting each element
of list x
using f
. A Json_error
exception is raised if
the given element is not a JSON Array
.
For example, converting a JSON array that must contain only ints
is performed using list int x
. Similarly, a list of lists of ints
can be obtained using list (list int) x
.
val option : Json_type.t -> Json_type.t option
option x
returns None
is x
is Null
and Some x
otherwise.val optional : (Json_type.t -> 'a) -> Json_type.t -> 'a option
optional f x
maps x using the given function f
and returns
Some result
, unless x
is Null
in which case it returns None
.
For example, optional int x
may return something like
Some 123
or None
or raise a Json_error
exception in case
x
is neither Null
nor an Int
.
See also Json_type.Browse.fieldx
.