Page
Library
Module
Module type
Parameter
Class
Class type
Source
Basic.Util
SourceThis module provides combinators for extracting fields from JSON values.
This module provides combinators for extracting fields from JSON values. This approach is recommended for reading a few fields from data returned by public APIs. However for more complex applications we recommend Atdgen.
Here is some sample JSON data:
{ "id": "398eb027", "name": "John Doe", "pages": [ { "id": 1, "title": "The Art of Flipping Coins", "url": "http://example.com/398eb027/1" }, { "id": 2, "deleted": true }, { "id": 3, "title": "Artichoke Salad", "url": "http://example.com/398eb027/3" }, { "id": 4, "title": "Flying Bananas", "url": "http://example.com/398eb027/4" } ] }
In order to extract the "id" field, assuming it is mandatory, we would use the following OCaml code that operates on single JSON nodes:
open Yojson.Basic.Util ... let id = json |> member "id" |> to_string in ...
In order to extract all the "title" fields, we would write the following OCaml code that operates on lists of JSON nodes, skipping undefined nodes and nodes of unexpected type:
open Yojson.Basic.Util let extract_titles (json : Yojson.Basic.t) : string list = [json] |> filter_member "pages" |> flatten |> filter_member "title" |> filter_string
Raised when the JSON value is not of the correct type to support an operation, e.g. member
on an `Int
. The string message explains the mismatch.
Raised when the equivalent JavaScript operation on the JSON value would return undefined. Currently this only happens when an array index is out of bounds.
member k obj
returns the value associated with the key k
in the JSON object obj
, or `Null
if k
is not present in obj
.
index i arr
returns the value at index i
in the JSON array arr
. Negative indices count from the end of the list (so -1 is the last element).
map f arr
calls the function f
on each element of the JSON array arr
, and returns a JSON array containing the results.
Return None
if the JSON value is null or map the JSON value to Some
value using the provided function.
Extract Some
boolean value, return None
if the value is null.
Extract Some
number, return None
if the value is null.
Extract a float value. to_number
is generally preferred as it also works with int literals.
Extract Some
float value, return None
if the value is null. to_number_option
is generally preferred as it also works with int literals.
Extract Some
int from a JSON int, return None
if the value is null.
Extract Some
string from a JSON string, return None
if the value is null.
The conversion functions above cannot be used with map
, because they do not return JSON values. This convenience function convert_each to_f arr
is equivalent to List.map to_f (to_list arr)
.
The following functions operate on lists of JSON nodes. None of them raises an exception when a certain kind of node is expected but no node or the wrong kind of node is found. Instead of raising an exception, nodes that are not as expected are simply ignored.
filter_map f l
maps each element of the list l
to an optional value using function f
and unwraps the resulting values.
Expects JSON arrays and returns all their elements as a single list. flatten l
is equivalent to List.flatten (filter_list l)
.
Expects JSON arrays and returns all their elements existing at the given position.
Expects JSON objects and returns all the fields of the given name (at most one field per object).
Expects JSON numbers (`Int
or `Float
) and unwraps them. Ints are converted to floats.