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.tmake_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.tfield 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.tfieldx 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 optionoptfield 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 optionoptfieldx is the same as optfield except that it
will never return Some Null
but None instead.val describe : Json_type.t -> stringdescribe 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 -> 'atype_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 -> boolval is_defined : Json_type.t -> boolval null : Json_type.t -> unitJson_error exception if the given JSON value is not Null.val string : Json_type.t -> stringJson_error exception.val bool : Json_type.t -> boolJson_error exception.val number : Json_type.t -> floatJson_error exception.val int : Json_type.t -> intJson_error exception.val float : Json_type.t -> floatJson_error exception.val array : Json_type.t -> Json_type.t listArray and returns an OCaml list,
or raises a Json_error exception.val objekt : Json_type.t -> (string * Json_type.t) listObject 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 listlist 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 optionoption x returns None is x is Null and Some x otherwise.val optional : (Json_type.t -> 'a) -> Json_type.t -> 'a optionoptional 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.