This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages)(Learn how and when to remove this template message)
|Original author(s)||Sadayuki Furuhashi|
|Written in||Various languages|
Data types and syntax
Data structures processed by MessagePack loosely correspond to those used in JSON format. They consist of the following element types:
- bool, boolean (
- int, integer (up to 64 bits signed or unsigned)
- float, floating point numbers (IEEE single/double precision)
- str, UTF-8 string
- bin, binary data (up to 232-1 bytes)
- map, an associative array
- ext (arbitrary data of an application-defined format, up to 232-1 bytes)
- timestamp (ext type = -1) (up to 32-bit seconds and 64-bit nanoseconds)
Comparison to other formats
MessagePack is more compact than JSON, but imposes limitations on array and integer sizes. On the other hand, it allows binary data and non UTF-8 encoded strings. In JSON, map keys have to be strings, but in MessagePack there is no such limitation and any type can be a map key, including types like maps and arrays, and, like YAML, numbers.
Compared to BSON, MessagePack is more space-efficient. BSON is designed for fast in-memory manipulation, whereas MessagePack is designed for efficient transmission over the wire. For example, BSON requires null terminators at the end of all strings and inserts string indexes for list elements, while MessagePack doesn't. BSON represents both arrays and maps internally as documents, which are maps, where an array is a map with keys as decimal strings counting up from 0. MessagePack on the other hand represents both maps and arrays as arrays, where each map key-value pair is contiguous, making odd items keys and even items values.
The Protocol Buffers format aims to be compact and is on par with MessagePack. However, while JSON and MessagePack aim to serialize arbitrary data structures with type tags, Protocol Buffers require a schema to define the data types. Protocol Buffers compiler creates boilerplate code in the target language to facilitate integration of serialization into the application code; MessagePack returns only a dynamically-typed data structure and provides no automatic structure checks.
MessagePack is not covered by a RFC but referenced and commented in rfc7049 of CBOR.
- Apache Thrift
- Apache Avro
- Protocol Buffers
- Comparison of data serialization formats
- "Implementation Projects". Retrieved 28 May 2013.