mirror of
https://github.com/nlohmann/json.git
synced 2026-10-02 14:04:32 +07:00
Conflicts: - include/nlohmann/json.hpp: took develop's removal of the UDLs (moved to json_literals.hpp, which already has the corrected @sa links) - single_include/nlohmann/json.hpp: regenerated with make amalgamate - docs/mkdocs/docs/api/operator_literal_json.md, operator_literal_json_pointer.md: kept the PR's migration guide link and develop's json_literals.hpp/JSON_NO_AUTOMATIC_UDLS note - docs/mkdocs/docs/api/basic_json/to_bson.md: both sides added out_of_range.415; kept develop's example message and both version history lines - docs/docset/docSet.sql: added JSON_NO_AUTOMATIC_UDLS (new on develop), which the PR's check_structure.py requires Signed-off-by: Niels Lohmann <mail@nlohmann.me>
3.5 KiB
3.5 KiB
nlohmann::basic_json::to_bson
// (1)
static std::vector<std::uint8_t> to_bson(const basic_json& j);
// (2)
static void to_bson(const basic_json& j, detail::output_adapter<std::uint8_t> o);
static void to_bson(const basic_json& j, detail::output_adapter<char> o);
BSON (Binary JSON) is a binary format in which zero or more ordered key/value pairs are stored as a single entity (a so-called document).
- Returns a byte vector containing the BSON serialization.
- Writes the BSON 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
Return value
- BSON 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.317if the top-level type of the JSON value is not an object; example:"to serialize to BSON, top-level type must be object, but is string" - Throws
out_of_range.409if a key in the JSON object contains a null byte (code point U+0000); example:"BSON key cannot contain code point U+0000 (at byte 2)" - Throws
out_of_range.412if the length of a document, array, string, or binary value exceeds the range of the 32-bit BSON length field; example:"BSON length 2147483661 exceeds maximum of 2147483647" - Throws
out_of_range.415if the subtype of a binary value exceeds 255, the maximum of the BSON binary subtype; example:"subtype 70000 is too large for the BSON binary subtype (max 255)"
Complexity
Linear in the size of the JSON value j. The length prefixes of all nested documents and arrays are computed in one
pass before anything is written.
Examples
??? example "Example: serialize a JSON value to BSON"
The example shows the serialization of a JSON value to a byte vector in BSON format.
```cpp
--8<-- "examples/to_bson.cpp"
```
Output:
```json
--8<-- "examples/to_bson.output"
```
??? example "Example: out_of_range.409 exception"
The example shows how serializing a JSON object whose key contains a null byte (U+0000) throws an exception, because
BSON keys are null-terminated C strings and cannot contain U+0000 themselves.
```cpp
--8<-- "examples/to_bson__exception.cpp"
```
Output:
```json
--8<-- "examples/to_bson__exception.output"
```
See also
- from_bson create a JSON value from an input in BSON format
- to_cbor create a CBOR serialization of a JSON value
- to_msgpack create a MessagePack 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 3.4.0.
- Throws
out_of_range.412andout_of_range.415since version 3.13.0. - Linear in the size of
j, and no longer limited by the call stack for deeply nested values, since version 3.13.0. out_of_range.415is now detected before anything is written, like the other exceptions above, since version 3.13.0.