module Json:sig..end
Json Library
Remarks:
Number can be used to encode non OCaml-primitive numbers,
for instance Zarith.typejson =[ `Assoc of (string * json) list
| `Bool of bool
| `Float of float
| `Int of int
| `List of json list
| `Null
| `String of string ]
Json Objects
Same type than Yojson.Basic.json
typet =json
val equal : t -> t -> boolStdlib
val compare : t -> t -> intStdlib
val pp : Stdlib.Format.formatter -> t -> unit
val pp_dump : Stdlib.Format.formatter -> t -> unitwithout formatting
exception Error of Filepath.Normalized.t * int * string
file, line, message
val of_bool : bool -> t
val of_int : int -> t
val of_string : string -> t
val of_float : float -> t
val of_list : t list -> t
val of_array : t array -> t
val of_fields : (string * t) list -> tParsing raise Error in case of error.
val load_lexbuf : Stdlib.Lexing.lexbuf -> tConsumes the entire buffer.
val load_channel : ?file:string -> Stdlib.in_channel -> tParses the stream until EOF.
val load_string : string -> tParses the Json in the string.
val load_file : string -> tMay also raise system exception.
Printers use formatting unless ~pretty:false.
val save_string : ?pretty:bool -> t -> string
val save_buffer : ?pretty:bool -> Stdlib.Buffer.t -> t -> unit
val save_channel : ?pretty:bool -> Stdlib.out_channel -> t -> unit
val save_formatter : ?pretty:bool -> Stdlib.Format.formatter -> t -> unit
val save_file : ?pretty:bool -> string -> t -> unitAccessors raise exception Invalid_argument in case of wrong
format.
val bool : t -> boolExtract True and False only.
Invalid_argument when the conversion fails.val int : t -> intConvert Null, Int, Float, Number and String to an int.
Floats are truncated with int_of_float and Null to 0.
Invalid_argument when the conversion fails.val string : t -> stringConvert Null, Int, Float, Number and String to a string.
Floats are truncated with string_of_float and Null to "".
Invalid_argument when the conversion fails.val float : t -> floatConvert Null, Int, Float, Number and String to float and Null to 0.0.
Invalid_argument when the conversion fails.val array : t -> t arrayExtract the array of an Array object.
Null is considered an empty array.
Invalid_argument if the object is not an array.val list : t -> t listExtract the list of an Array object.
Null is considered an empty list.
Invalid_argument if the object is not a list.val assoc : t -> (string * t) listExtract the list of an Assoc object.
Null is considered an empty assoc.
Invalid_argument if the object is not a list.val fold : (string -> t -> 'a -> 'a) -> t -> 'a -> 'aFold over all fields of the object.
Null is considered an empty object.
Typical usage is fold M.add t M.empty where M=Map.Make(String).
Invalid_argument if the object is not an Assoc or Null object.val field : string -> t -> tLookup a field in an object.
Null is considered an empty object.
Not_found if the field is absent from the object.Invalid_argument if the object is not an Assoc or Null object.The functions below read and write to JSON files asynchronously; they are intended to be called at different times during execution. To avoid reopening, re-reading and rewriting the same file several times, they instead operate as following:
json_flush_cache below, which is setup
to run with an at_exit trigger.Note: no other functions should modify the contents of path; any
modifications will be overwritten when the cache is flushed.
exception CannotMerge of string
Exception raised by the functions below when incompatible types are merged.
val merge_object : Filepath.Normalized.t -> t -> unitmerge_object path json_obj recursively merges the object json_obj into the
JSON file path. If path does not exist, it is created.
Merge consists in combining values with the same key, e.g. if path
already contains an object {"kernel": {"options": ["a"]}}, and
json_obj is {"kernel": {"options": ["b"]}}, the result will be
{"kernel": {"options": ["a", "b"]}}. Cannot merge heterogeneous
objects, i.e. in the previous example, if "options" were associated
with a string in path, trying to merge an array into it would
raise CannotMerge.
The merged object is updated in the memory cache.
CannotMerge if the objects have conflicting types for
the same keys, or if the root JSON element is not an object.val merge_array : Filepath.Normalized.t -> t -> unitmerge_list path json_array merges the array json_array into the
JSON file path. See merge_object for more details.
Unlike objects, arrays are merged by simply concatenating their list
of elements.
CannotMerge if the root JSON element is not an array.val from_file : Filepath.Normalized.t -> tfrom_file path opens path and stores its JSON object in
a memory cache, to be used by the other related functions.
Yojson.Json_error if path is a malformed JSON file.val flush_cache : unit -> Filepath.Normalized.t listFlushes the JSON objects in the cache. Returns the names of the written files.