Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
JSON decoding.
val show_error : error -> string
Convert a JSON parse error to a string.
exception Error of error
Exception that can happen when parsing or reading JSON.
val error : t -> ('a, unit, string, 'b) Stdlib.format4 -> 'a
Raise Error
.
The JSON.t
argument is used to annotate the error message with the location of the JSON value.
val encode : t -> string
Encode a JSON annotated AST into a string.
val encode_u : u -> string
Encode a JSON unannotated AST into a string.
val encode_to_file : string -> t -> unit
Encode a JSON annotated AST into a file.
val encode_to_file_u : string -> u -> unit
Encode a JSON unannotated AST into a file.
val parse_file : string -> t
Parse a JSON file.
val parse : origin:string -> string -> t
Parse a JSON string.
val parse_opt : origin:string -> string -> t option
Same as parse
, but return None
instead of raising Error
.
The general pattern for the accessors below is that only as_x
functions can fail. Getters get
and geti
return `Null
instead of failing. This allows to chain them and only test for errors at the end with as_x
, either by raising Error
or by returning None
(with the as_x_opt
variant).
Internally, the actual error which is printed is the correct one. For instance, with json |-> "x" |> as_int
, if json
is not an object, the call to as_int
causes the test to fail with "<origin>: not an object"
where <origin>
is the ~origin
you gave to parse
. If json
is an object but "x"
does not exist, as_int
causes the test to fail with "<origin>: missing field: x"
. If "x"
exists but is not an integer, as_int
causes the test to fail with "<origin> at .x: expected an integer"
.
Get the value for a field of a JSON object.
If the JSON value is not an object, or if the field does not exist, return `Null
.
Get the value for a field of a JSON array.
If the JSON value is not an array, or if the field does not exist, return `Null
.
Updates an object with a (key, value)
pair.
put (key, value) obj
puts value
under key
in obj
. If the key
already exists, it is overwritten. Otherwise a new key is added at the end of the object.
Alters the value of a specific key in a JSON object by applying its value to a function. Returns updated object.
update key f obj
is equivalent to put (key, f (get key obj)) obj
.
Note: if key
is not present in obj
, `Null
is passed to f
instead.
filter_map_object obj f
maps f
over each field in obj
.
If f key value
is None
then the key
is removed from obj
. If f key value
is Some value'
then the key
is overwritten with value'
.
filter_object obj f
filters the bindings in obj
.
filter_object obj f
removes each binding key, value
in obj
for which f key value
is false
.
Non-recursively merges two objects.
merge_objects o1 o2
returns an object containing all fields of o1
and o2
. If a key exists in both o1
and o2
, then it will be bound to its value in o2
.
val is_null : t -> bool
Test whether a JSON value is `Null
.
Return None
if a JSON value is `Null
, Some
otherwise.
Example: JSON.(json |> as_opt |> Option.map read_record)
val as_bool : t -> bool
Get the value from a `Bool
node.
val as_bool_opt : t -> bool option
Same as as_bool
, but return None
instead of raising Error
.
val is_bool : t -> bool
Test whether as_bool
would succeed.
val as_int : t -> int
Get the integer value from a `Float
or `String
node.
val as_int_opt : t -> int option
Same as as_int
, but return None
instead of raising Error
.
val is_int : t -> bool
Test whether as_int
would succeed.
val as_int64 : t -> int64
Get the integer value from a `Float
or `String
node (64-bit version).
val as_int64_opt : t -> int64 option
Same as as_int64
, but return None
instead of raising Error
.
val is_int64 : t -> bool
Test whether as_int64
would succeed.
val as_int32 : t -> int32
Get the integer value from a `Float
or `String
node (32-bit version).
val as_int32_opt : t -> int32 option
Same as as_int32
, but return None
instead of raising Error
.
val is_int32 : t -> bool
Test whether as_int32
would succeed.
val as_float : t -> float
Get the float value from a `Float
or `String
node.
val as_float_opt : t -> float option
Same as as_float
, but return None
instead of raising Error
.
val is_float : t -> bool
Test whether as_float
would succeed.
val as_string : t -> string
Get the value from a `String
node.
val as_string_opt : t -> string option
Same as as_string
, but return None
instead of raising Error
.
val is_string : t -> bool
Test whether as_string
would succeed.
val is_list : t -> bool
Test whether as_list
would succeed.
Same as as_object
, but return None
instead of raising Error
.
val is_object : t -> bool
Test whether as_object
would succeed.
Equality for JSON unannotated ASTs.
Objects are equal only when they have the exact same number of fields with the same contents (their order does not matter). Consequently, e.g. {"a": 1}
is not equal to {"a": 1,
"a": 1}
.
Arrays are equal when they contain the same number of pair-wise equal elements.