mirror of
https://github.com/nlohmann/json.git
synced 2026-10-09 18:35:22 +00:00
* Throw type_error.321 when serializing discarded values to binary formats The CBOR, MessagePack, UBJSON, BJData, and BSON writers silently skipped the payload of a value_t::discarded value nested in an array or object, while still writing its slot in the element/member count (and, for BSON, its entry header), producing a binary document whose declared size does not match what was actually written. Throw type_error.321 instead, for a discarded value anywhere in the tree, including at the top level. Rewritten from the original PR against the current (non-recursive option aside) binary_writer.hpp, which has changed substantially since this was first proposed; the out_of_range.412 MessagePack size check and unrelated test reformatting from that PR are dropped as out of scope here. Signed-off-by: Niels Lohmann <mail@nlohmann.me> * Document and test type_error.321 for discarded binary values Add docs for the new exception (home/exceptions.md and the Exceptions sections of to_cbor/to_msgpack/to_ubjson/to_bjdata/to_bson) and test coverage for a discarded value nested in an array or object, nested deeper, and (for UBJSON/BJData) inside an optimized same-type array, for each of CBOR, MessagePack, UBJSON, BJData, and BSON. Adjust the three pre-existing "discarded" tests that asserted the old silent behavior (empty/short output) to expect type_error.321 instead. Co-authored-by: ameliabarnabyhub <312084480+ameliabarnabyhub@users.noreply.github.com> Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me> Co-authored-by: ameliabarnabyhub <ameliabarnabyhub@users.noreply.github.com> Co-authored-by: ameliabarnabyhub <312084480+ameliabarnabyhub@users.noreply.github.com>
3.5 KiB
3.5 KiB
nlohmann::basic_json::to_cbor
// (1)
static std::vector<std::uint8_t> to_cbor(const basic_json& j,
const error_handler_t error_handler = error_handler_t::keep);
// (2)
static void to_cbor(const basic_json& j, detail::output_adapter<std::uint8_t> o,
const error_handler_t error_handler = error_handler_t::keep);
static void to_cbor(const basic_json& j, detail::output_adapter<char> o,
const error_handler_t error_handler = error_handler_t::keep);
Serializes a given JSON value j to a byte vector using the CBOR (Concise Binary Object Representation) serialization
format. CBOR is a binary serialization format that aims to be more compact than JSON itself, yet more efficient to
parse.
- Returns a byte vector containing the CBOR serialization.
- Writes the CBOR serialization to an output adapter.
The exact mapping and its limitations are described on a dedicated page.
Parameters
j(in)- JSON value to serialize
o(in)- output adapter to write serialization to
error_handler(in)- how to treat a string or object key in
jthat is not valid UTF-8; seeerror_handler_t. The default,keep, writes the ill-formed bytes to the output as is, as every version ofto_cbordid before this parameter was added;strictthrows;replace/ignoresanitize it the same waydumpwould. IfJSON_STRICT_BINARY_UTF8is enabled, the default isstrictinstead.
Return value
- CBOR serialization as a byte vector
- (none)
Exception safety
Strong guarantee: if an exception is thrown, there are no changes in the JSON value.
Exceptions
- Throws type_error.316 if a string or object key in
jis not valid UTF-8 anderror_handlerisstrict(the default only ifJSON_STRICT_BINARY_UTF8is enabled) - Throws type_error.321 if
jor a value nested in it is discarded; example:"cannot serialize discarded value to CBOR"
Complexity
Linear in the size of the JSON value j.
Examples
??? example
The example shows the serialization of a JSON value to a byte vector in CBOR format.
```cpp
--8<-- "examples/to_cbor.cpp"
```
Output:
```json
--8<-- "examples/to_cbor.output"
```
See also
- from_cbor create a JSON value from an input in CBOR format
- to_msgpack create a MessagePack serialization of a JSON value
- to_bson create a BSON serialization of a JSON value
- to_ubjson create a UBJSON serialization of a JSON value
- to_bjdata create a BJData serialization of a JSON value
- to_bon8 create a BON8 serialization of a JSON value
Version history
- Added in version 2.0.9.
- Compact representation of floating-point numbers added in version 3.8.0.
- Added
error_handlerparameter in version 3.13.0. Its default,keep, writes the bytes of a string or object key that is not valid UTF-8 unchanged, as before;strict(the default ifJSON_STRICT_BINARY_UTF8is enabled) throwstype_error.316. - Throws
type_error.321for a discarded value since version 3.13.0; previously, a discarded value nested in an array or object was silently skipped, producing invalid CBOR.