nlohmann::basic_json::parser_callback_t

template<typename BasicJsonType>
using parser_callback_t =
    std::function<bool(int depth, parse_event_t event, BasicJsonType& parsed)>;

With a parser callback function, the result of parsing a JSON text can be influenced. When passed to parse, it is called on certain events (passed as parse_event_t via parameter event) with a set recursion depth depth and context JSON value parsed. The return value of the callback function is a boolean indicating whether the element that emitted the callback shall be kept or not.

We distinguish six scenarios (determined by the event type) in which the callback function can be called. The following table describes the values of the parameters depth, event, and parsed.

parameter eventdescriptionparameter depthparameter parsed
parse_event_t::object_startthe parser read { and started to process a JSON objectdepth of the parent of the JSON objecta JSON value with type discarded
parse_event_t::keythe parser read a key of a value in an objectdepth of the currently parsed JSON objecta JSON string containing the key
parse_event_t::object_endthe parser read } and finished processing a JSON objectdepth of the parent of the JSON objectthe parsed JSON object
parse_event_t::array_startthe parser read [ and started to process a JSON arraydepth of the parent of the JSON arraya JSON value with type discarded
parse_event_t::array_endthe parser read ] and finished processing a JSON arraydepth of the parent of the JSON arraythe parsed JSON array
parse_event_t::valuethe parser finished reading a JSON valuedepth of the valuethe parsed JSON value

Example when certain parse events are triggered

Discarding a value (i.e., returning #!cpp false) has different effects depending on the context in which function was called:

  • Discarded values in structured types are skipped. That is, the parser will behave as if the discarded value was never read.
  • In case a value outside a structured type is skipped, it is replaced with null. This case happens if the top-level element is skipped.

Parameters

depth (in) : the depth of the recursion during parsing

event (in) : an event of type parse_event_t indicating the context in the callback function has been called

parsed (in, out) : the current intermediate parse result; note that writing to this value has no effect for parse_event_t::key events

Return value

Whether the JSON value which called the function during parsing should be kept (#!cpp true) or not (#!cpp false). In the latter case, it is either skipped completely or replaced by an empty discarded object.

Examples

??? example

The example below demonstrates the `parse()` function with
and without callback function.

```cpp
--8<-- "examples/parse__string__parser_callback_t.cpp"
```

Output:

```json
--8<-- "examples/parse__string__parser_callback_t.output"
```

Version history

  • Added in version 1.0.0.