From ce273af9b6f94cb1c6731511ce44a1d888423d00 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Tue, 30 Jan 2018 23:20:36 +0100 Subject: [PATCH] :memo: added documentation for binary formats --- doc/Doxyfile | 3 +- doc/binary_formats.md | 172 ++++++++++++++++++++++++++++++++++++++++++ doc/images/binary.png | Bin 0 -> 65897 bytes doc/index.md | 2 +- 4 files changed, 175 insertions(+), 2 deletions(-) create mode 100644 doc/binary_formats.md create mode 100644 doc/images/binary.png diff --git a/doc/Doxyfile b/doc/Doxyfile index 4c64dd6f9..46d3685c7 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -109,7 +109,8 @@ WARN_LOGFILE = #--------------------------------------------------------------------------- INPUT = ../src/json.hpp \ index.md \ - faq.md + faq.md \ + binary_formats.md INPUT_ENCODING = UTF-8 FILE_PATTERNS = RECURSIVE = NO diff --git a/doc/binary_formats.md b/doc/binary_formats.md new file mode 100644 index 000000000..8b1878601 --- /dev/null +++ b/doc/binary_formats.md @@ -0,0 +1,172 @@ +# Binary formats + +![conversion between JSON and binary formats](images/binary.png) + +Several formats exist that encode JSON values in a binary format to reduce the size of the encoded value as well as the required effort to parse encoded value. The library implements three formats, namely + +- [CBOR](https://tools.ietf.org/html/rfc7049) (Concise Binary Object Representation) +- [MessagePack](https://msgpack.org) +- [UBJSON](http://ubjson.org) (Universal Binary JSON) + +## Interface + +### JSON to binary format + +For each format, the `to_*` functions (i.e., `to_cbor`, `to_msgpack`, and `to_ubjson`) convert a JSON value into the respective binary format. Taking CBOR as example, the concrete prototypes are: + +```cpp +static std::vector to_cbor(const basic_json& j); // 1 +static void to_cbor(const basic_json& j, detail::output_adapter o); // 2 +static void to_cbor(const basic_json& j, detail::output_adapter o); // 3 +``` + +The first function creates a byte vector from the given JSON value. The second and third function writes to an output adapter of `uint8_t` and `char`, respectively. Output adapters are implemented for strings, output streams, and vectors. + +Given a JSON value `j`, the following calls are possible: + +```cpp +std::vector v; +v = json::to_cbor(j); // 1 + +json::to_cbor(j, v); // 2 + +std::string s; +json::to_cbor(j, s); // 3 + +std::ostringstream oss; +json::to_cbor(j, oss); // 3 +``` + +### Binary format to JSON + +Likewise, the `from_*` functions (i.e, `from_cbor`, `from_msgpack`, and `from_ubjson`) convert a binary encoded value into a JSON value. Taking CBOR as example, the concrete prototypes are: + +```cpp +static basic_json from_cbor(detail::input_adapter i, const bool strict = true); // 1 +static basic_json from_cbor(A1 && a1, A2 && a2, const bool strict = true); // 2 +``` + +Both functions read from an input adapter: the first function takes it directly form argument `i`, whereas the second function creates it from the provided arguments `a1` and `a2`. If the optional parameter `strict` is true, the input must be read completely (or a parse error exception is thrown). If it is false, parsing succeeds even if the input is not completely read. + +Input adapters are implemented for input streams, character buffers, string literals, and iterator ranges. + +Given several inputs (which we assume to be filled with a CBOR value), the following calls are possible: + +```cpp +std::string s; +json j1 = json::from_cbor(s); // 1 + +std::ifstream is("somefile.cbor", std::ios::binary); +json j2 = json::from_cbor(is); // 1 + +std::vector v; +json j3 = json::from_cbor(v); // 1 + +const char* buff; +ize_t buff_size; +json j4 = json::from_cbor(buff, buff_size); // 2 +``` + +## Details + +### CBOR + +The mapping from CBOR to JSON is **incomplete** in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors (parse_error.112): + +- byte strings (0x40..0x5F) +- date/time (0xC0..0xC1) +- bignum (0xC2..0xC3) +- decimal fraction (0xC4) +- bigfloat (0xC5) +- tagged items (0xC6..0xD4, 0xD8..0xDB) +- expected conversions (0xD5..0xD7) +- simple values (0xE0..0xF3, 0xF8) +- undefined (0xF7) + +CBOR further allows map keys of any type, whereas JSON only allows strings as keys in object values. Therefore, CBOR maps with keys other than UTF-8 strings are rejected (parse_error.113). + +The mapping from JSON to CBOR is **complete** in the sense that any JSON value type can be converted to a CBOR value. + +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. + +The following CBOR types are not used in the conversion: + +- byte strings (0x40..0x5F) +- UTF-8 strings terminated by "break" (0x7F) +- arrays terminated by "break" (0x9F) +- maps terminated by "break" (0xBF) +- date/time (0xC0..0xC1) +- bignum (0xC2..0xC3) +- decimal fraction (0xC4) +- bigfloat (0xC5) +- tagged items (0xC6..0xD4, 0xD8..0xDB) +- expected conversions (0xD5..0xD7) +- simple values (0xE0..0xF3, 0xF8) +- undefined (0xF7) +- half and single-precision floats (0xF9-0xFA) +- break (0xFF) + +### MessagePack + +The mapping from MessagePack to JSON is **incomplete** in the sense that not all MessagePack types can be converted to a JSON value. The following MessagePack types are not supported and will yield parse errors: + +- bin 8 - bin 32 (0xC4..0xC6) +- ext 8 - ext 32 (0xC7..0xC9) +- fixext 1 - fixext 16 (0xD4..0xD8) + +The mapping from JSON to MessagePack 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`. + +### UBJSON + +The mapping from UBJSON to JSON is **complete** in the sense that any UBJSON value can be converted to a JSON value. + +The mapping from JSON to UBJSON is **complete** in the sense that any JSON value type can be converted to a UBJSON value. + +The following values can not be converted to a UBJSON value: + +- strings with more than 9223372036854775807 bytes (theoretical) +- unsigned integer numbers above 9223372036854775807 + +The following markers are not used in the conversion: + +- `Z`: no-op values are not created. +- `C`: single-byte strings are serialized with S markers. + +Any UBJSON output created to_ubjson can be successfully parsed by from_ubjson. + +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. + +The optimized formats for containers are supported: Parameter `use_size` adds size information to the beginning of a container and removes the closing marker. Parameter `use_type` further checks whether all elements of a container have the same type and adds the type marker to the beginning of the container. The `use_type` parameter must only be used together with `use_size = true`. Note that `use_size = true` alone may result in larger representations - the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container. + +## Size comparison examples + +The following table shows the size (in bytes) of different files in the `test/data` directory for the different formats. + +| format | sample.json | floats.json | all_unicode.json | +| ----------------------- | -----------:| -----------:| ----------------:| +| JSON | 687491 | 22670390 | 13279259 | +| CBOR | **147095** | 9000005 | **5494662** | +| MsgPack | 148395 | 9000005 | **5494662** | +| UBJSON unoptimized | 148695 | 9000002 | 7718787 | +| UBJSON size-optimized | 150569 | 9000007 | 7718792 | +| UBJSON format-optimized | 150883 | **8000009** | 7718792 | + +The results show that there does not exist a "best" encoding. Furthermore, it is not always worthwhile to use UBJSON's optimizations. + diff --git a/doc/images/binary.png b/doc/images/binary.png new file mode 100644 index 0000000000000000000000000000000000000000..2579fd8f485383195cb8e6a26c02c7a14cd63dd2 GIT binary patch literal 65897 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 literal 0 HcmV?d00001 diff --git a/doc/index.md b/doc/index.md index 6fbe2a4ad..66ad588cd 100644 --- a/doc/index.md +++ b/doc/index.md @@ -42,7 +42,7 @@ These pages contain the API documentation of JSON for Modern C++, a C++11 header - @link nlohmann::basic_json::parse parse @endlink parse from string - @link nlohmann::basic_json::operator>>(std::istream&, basic_json&) operator>> @endlink parse from stream - @link nlohmann::basic_json::accept accept @endlink check for syntax errors without parsing - - binary formats: + - [binary formats](binary_formats.md): - CBOR: @link nlohmann::basic_json::from_cbor from_cbor @endlink / @link nlohmann::basic_json::to_cbor to_cbor @endlink - MessagePack: @link nlohmann::basic_json::from_msgpack from_msgpack @endlink / @link nlohmann::basic_json::to_msgpack to_msgpack @endlink - UBJSON: @link nlohmann::basic_json::from_ubjson from_ubjson @endlink / @link nlohmann::basic_json::to_ubjson to_ubjson @endlink