mirror of
https://github.com/nlohmann/json.git
synced 2026-10-05 06:00:29 +00:00
2.9 KiB
2.9 KiB
nlohmann::basic_json::error_handler_t
enum class error_handler_t {
strict,
replace,
ignore,
keep
};
This enumeration is used to choose how to treat ill-formed UTF-8 in a string value or object key:
dumpuses it while serializing abasic_jsonvalue to text.to_cbor,to_msgpack,to_ubjson,to_bjdata, andto_bsonuse it while serializing abasic_jsonvalue to that binary format. Their default iskeep, as no binary writer checked before this parameter was added. CBOR, UBJSON, BJData, and BSON require valid UTF-8, so for these four the default isstrictifJSON_STRICT_BINARY_UTF8is enabled; MessagePack's specification explicitly allows a string to contain ill-formed UTF-8, soto_msgpackstays atkeep.to_bon8does not take this parameter: BON8 always validates, since UTF-8 lead bytes are structural to that format.from_cbor,from_msgpack,from_ubjson,from_bjdata, andfrom_bsonuse it while parsing that binary format, to decide whether to check a string value or object key for well-formed UTF-8 at all; by default (keep) they do not, as no binary reader did before this parameter was added.from_bon8does not take this parameter, for the same reasonto_bon8does not.
Four values are differentiated:
- strict
- throw a
type_error/parse_errorexception in case of invalid UTF-8 - replace
- replace invalid UTF-8 sequences with U+FFFD (� REPLACEMENT CHARACTER)
- ignore
- ignore invalid UTF-8 sequences; all valid bytes are copied to the output unchanged, and invalid bytes are dropped
- keep
- keep invalid UTF-8 sequences unchanged; only meaningful for the binary formats mentioned above, since [
dump] (dump.md) itself must produce text, andkeepthere writes the ill-formed bytes to the output as is, so the result is then not valid UTF-8 (but still equals the input bytes exactly, including around any well-formed characters, which are still escaped as usual)
Examples
??? example
The example below shows how the different values of the `error_handler_t` influence the behavior of
[`dump`](dump.md) when reading serializing an invalid UTF-8 sequence.
```cpp
--8<-- "examples/error_handler_t.cpp"
```
Output:
```json
--8<-- "examples/error_handler_t.output"
```
See also
- dump serializes a JSON value, with an
error_handler_tparameter to configure invalid UTF-8 handling - Handling invalid UTF-8 - the article on handling invalid UTF-8
Version history
- Added in version 3.4.0.
- Added
keep, and made this enumeration apply to the binary readers and writers in addition todump, in version 3.13.0.