Skip to content

# 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

- BSON (Binary JSON),
- CBOR (Concise Binary Object Representation),
- MessagePack, and
- UBJSON (Universal Binary JSON Specification)

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

### Binary values

Format | Binary values | Binary subtypes
--- | --- | ---
BSON | supported | supported
CBOR | supported | not supported
MessagePack | supported | supported
UBJSON | not supported | not supported

### Sizes

Format | canada.json | twitter.json | citm_catalog.json | jeopardy.json
--- | --- | --- | --- | ---
BSON | 85,8 % | 95,2 % | 95,8 % | 106,7 %
CBOR | 50,5 % | 86,3 % | 68,4 % | 88,0 %
MessagePack | 50,6 % | 86,0 % | 68,5 % | 87,9 %
UBJSON | 53,2 % | 91,3 % | 78,2 % | 96,6 %
UBJSON (size) | 58,6 % | 92,3 % | 86,8 % | 97,4 %
UBJSON (size+type) | 55,9 % | 92,3 % | 85,0 % | 95,0 %