2020-05-24 14:03:04 +03:00
# Overview
Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports
2020-05-24 22:05:35 +03:00
- [BSON ](bson.md ) (Binary JSON),
- [CBOR ](cbor.md ) (Concise Binary Object Representation),
- [MessagePack ](messagepack.md ), and
2020-05-24 23:45:38 +03:00
- [UBJSON ](ubjson.md ) (Universal Binary JSON)
2021-09-11 15:59:21 +03:00
- BON8
2020-05-24 14:03:04 +03:00
to efficiently encode JSON values to byte vectors and to decode such vectors.
## Comparison
### Completeness
| Format | Serialization | Deserialization |
| ----------- |---------------------------------------------- | -------------------------------------------- |
| BSON | incomplete: top-level value must be an object | incomplete, but all JSON types are supported |
| CBOR | complete | incomplete, but all JSON types are supported |
| MessagePack | complete | complete |
| UBJSON | complete | complete |
2021-09-11 15:59:21 +03:00
| BON8 | complete | not yet implemented |
2020-05-24 14:03:04 +03:00
### Binary values
| Format | Binary values | Binary subtypes |
| ----------- | ------------- | --------------- |
| BSON | supported | supported |
2021-08-08 14:24:17 +03:00
| CBOR | supported | supported |
2020-05-24 14:03:04 +03:00
| MessagePack | supported | supported |
| UBJSON | not supported | not supported |
2021-09-11 15:59:21 +03:00
| BON8 | not supported | not supported |
2020-05-24 14:03:04 +03:00
2020-05-24 23:45:38 +03:00
See [binary values ](../binary_values.md ) for more information.
2020-05-24 14:03:04 +03:00
### Sizes
2021-09-11 16:40:47 +03:00
| Format | [canada.json ](https://github.com/nlohmann/json_test_data/blob/master/nativejson-benchmark/canada.json ) | [twitter.json ](https://github.com/nlohmann/json_test_data/blob/master/nativejson-benchmark/twitter.json ) | [citm_catalog.json ](https://github.com/nlohmann/json_test_data/blob/master/nativejson-benchmark/citm_catalog.json ) | [jeopardy.json ](https://github.com/nlohmann/json_test_data/blob/master/jeopardy/jeopardy.json ) | [sample.json ](https://github.com/nlohmann/json_test_data/blob/master/json_testsuite/sample.json ) |
| ------------------ | ----------- | ------------ | ----------------- | ------------- | ------------- |
| BSON | 85,8 % | 95,2 % | 95,8 % | 106,7 % (1) | N/A (2) |
| CBOR | 50,5 % | 86,3 % | 68,4 % | 88,0 % | 87,2 % |
| MessagePack | 50,6 % | 86,0 % | 68,5 % | 87,9 % | 87,2 % |
| UBJSON | 53,2 % | 91,3 % | 78,2 % | 96,6 % | 88,2 % |
| UBJSON (size) | 58,6 % | 92,3 % | 86,8 % | 97,4 % | 89,3 % |
| UBJSON (size+type) | 55,9 % | 92,3 % | 85,0 % | 95,0 % | 89,5 % |
| BON8 | 50,5 % | 83,8 % | 63,5 % | 87,5 % | 85,6 % |
2020-05-24 23:45:38 +03:00
Sizes compared to minified JSON value.
2021-09-11 16:40:47 +03:00
Notes:
- (1) The JSON value is an array that needed to be wrapped in an object to be processed by BSON. We used an empty object key for minimal overhead.
- (2) The JSON value contained a string with code point `U+0000` which cannot be represented by BSON.
The JSON files are part of the [nlohmann/json_test_data ](https://github.com/nlohmann/json_test_data ) repository.