Serializes a given JSON value j to a byte vector using the MessagePack serialization format. MessagePack is a binary serialization format which aims to be more compact than JSON itself, yet more efficient to parse.
The library uses the following mapping from JSON values types to MessagePack types according to the MessagePack specification:
JSON value type | value/range | MessagePack type | first byte |
null | null | nil | 0xC0 |
boolean | true | true | 0xC3 |
boolean | false | false | 0xC2 |
number_integer | -9223372036854775808..-2147483649 | int64 | 0xD3 |
number_integer | -2147483648..-32769 | int32 | 0xD2 |
number_integer | -32768..-129 | int16 | 0xD1 |
number_integer | -128..-33 | int8 | 0xD0 |
number_integer | -32..-1 | negative fixint | 0xE0..0xFF |
number_integer | 0..127 | positive fixint | 0x00..0x7F |
number_integer | 128..255 | uint 8 | 0xCC |
number_integer | 256..65535 | uint 16 | 0xCD |
number_integer | 65536..4294967295 | uint 32 | 0xCE |
number_integer | 4294967296..18446744073709551615 | uint 64 | 0xCF |
number_unsigned | 0..127 | positive fixint | 0x00..0x7F |
number_unsigned | 128..255 | uint 8 | 0xCC |
number_unsigned | 256..65535 | uint 16 | 0xCD |
number_unsigned | 65536..4294967295 | uint 32 | 0xCE |
number_unsigned | 4294967296..18446744073709551615 | uint 64 | 0xCF |
number_float | any value | float 64 | 0xCB |
string | length: 0..31 | fixstr | 0xA0..0xBF |
string | length: 32..255 | str 8 | 0xD9 |
string | length: 256..65535 | str 16 | 0xDA |
string | length: 65536..4294967295 | str 32 | 0xDB |
array | size: 0..15 | fixarray | 0x90..0x9F |
array | size: 16..65535 | array 16 | 0xDC |
array | size: 65536..4294967295 | array 32 | 0xDD |
object | size: 0..15 | fix map | 0x80..0x8F |
object | size: 16..65535 | map 16 | 0xDE |
object | size: 65536..4294967295 | map 32 | 0xDF |
- Note
- The mapping is complete in the sense that any JSON value type can be converted to a MessagePack value.
-
The following values can not be converted to a MessagePack value:
- strings with more than 4294967295 bytes
- arrays with more than 4294967295 elements
- objects with more than 4294967295 elements
-
The following MessagePack types are not used in the conversion:
- bin 8 - bin 32 (0xC4..0xC6)
- ext 8 - ext 32 (0xC7..0xC9)
- float 32 (0xCA)
- fixext 1 - fixext 16 (0xD4..0xD8)
-
Any MessagePack output created to_msgpack can be successfully parsed by from_msgpack.
-
If NaN or Infinity are stored inside a JSON number, they are serialized properly. This behavior differs from the dump() function which serializes NaN or Infinity to
null
.
- Parameters
-
[in] | j | JSON value to serialize |
- Returns
- MessagePack serialization as byte vector
- Complexity
- Linear in the size of the JSON value j.
- Example
- The example shows the serialization of a JSON value to a byte vector in MessagePack format.
3 #include <nlohmann/json.hpp>
10 json j = R
"({"compact": true, "schema": 0})"_json;
18 std::cout <<
"0x" << std::hex << std::setw(2) << std::setfill(
'0') << (int)
byte <<
" ";
20 std::cout << std::endl;
Output (play with this example online): 0x82 0xa7 0x63 0x6f 0x6d 0x70 0x61 0x63 0x74 0xc3 0xa6 0x73 0x63 0x68 0x65 0x6d 0x61 0x00
The example code above can be translated withg++ -std=c++11 -Isingle_include doc/examples/to_msgpack.cpp -o to_msgpack
- See also
- http://msgpack.org
-
from_msgpack for the analogous deserialization
-
to_cbor(const basic_json& for the related CBOR format
-
to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format
- Since
- version 2.0.9
Definition at line 21224 of file json.hpp.