JSON for Modern C++ 3.10.4

◆ to_bson() [1/3]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
static std::vector< std::uint8_t > nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::to_bson ( const basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType > &  j)

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).

The library uses the following mapping from JSON values types to BSON types:

JSON value type value/range BSON type marker
null null null 0x0A
boolean true, false boolean 0x08
number_integer -9223372036854775808..-2147483649 int64 0x12
number_integer -2147483648..2147483647 int32 0x10
number_integer 2147483648..9223372036854775807 int64 0x12
number_unsigned 0..2147483647 int32 0x10
number_unsigned 2147483648..9223372036854775807 int64 0x12
number_unsigned 9223372036854775808..18446744073709551615
number_float any value double 0x01
string any value string 0x02
array any value document 0x04
object any value document 0x03
binary any value binary 0x05
The mapping is incomplete, since only JSON-objects (and things contained therein) can be serialized to BSON. Also, integers larger than 9223372036854775807 cannot be serialized to BSON, and the keys may not contain U+0000, since they are serialized a zero-terminated c-strings.
out_of_range.407if j.is_number_unsigned() && j.get<std::uint64_t>() > 9223372036854775807
out_of_range.409if a key in j contains a NULL (U+0000)
type_error.317if !j.is_object()
The input j is required to be an object: j.is_object() == true.
Any BSON output created via to_bson can be successfully parsed by from_bson.
[in]jJSON value to serialize
BSON serialization as byte vector
Linear in the size of the JSON value j.
The example shows the serialization of a JSON value to a byte vector in BSON format.
1#include <iostream>
2#include <iomanip>
3#include <nlohmann/json.hpp>
5using json = nlohmann::json;
7int main()
9 // create a JSON value
10 json j = R"({"compact": true, "schema": 0})"_json;
12 // serialize it to BSON
13 std::vector<uint8_t> v = json::to_bson(j);
15 // print the vector content
16 for (auto& byte : v)
17 {
18 std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << (int)byte << " ";
19 }
20 std::cout << std::endl;
static std::vector< std::uint8_t > to_bson(const basic_json &j)
Serializes the given JSON object j to BSON and returns a vector containing the corresponding BSON-rep...
Definition: json.hpp:25113
basic_json<> json
default JSON class
Definition: json.hpp:3472

Output (play with this example online):
0x1b 0x00 0x00 0x00 0x08 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0x00 0x01 0x10 0x73 0x63 0x68 0x65 0x6d 0x61 0x00 0x00 0x00 0x00 0x00 0x00 
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/to_bson.cpp -o to_bson 
See also
see from_bson(detail::input_adapter&&, const bool strict) for the analogous deserialization
see to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format
see to_cbor(const basic_json&) for the related CBOR format
see to_msgpack(const basic_json&) for the related MessagePack format

Definition at line 25113 of file json.hpp.