template<template< typename, typename, typename... > class ObjectType = std::map, template< typename, typename... > 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 > class AllocatorType = std::allocator, template< typename, typename=void > class JSONSerializer = adl_serializer>
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.
9 json j = R
"({"compact": true, "schema": 0})"_json; 17 std::cout <<
"0x" << std::hex << std::setw(2) << std::setfill(
'0') << (int)byte <<
" ";
19 std::cout << std::endl;
basic_json<> json
default JSON class
static std::vector< uint8_t > to_msgpack(const basic_json &j)
create a MessagePack serialization of a given JSON value
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 -Isrc doc/examples/to_msgpack.cpp -o to_msgpack
- See also
- http://msgpack.org
-
from_msgpack(const std::vector<uint8_t>&, const size_t) for the analogous deserialization
-
to_cbor(const basic_json& for the related CBOR format
- Since
- version 2.0.9
Definition at line 13429 of file json.hpp.