MessagePack в JSON

О MessagePack

Что такое MessagePack?

MessagePack — компактный бинарный формат сериализации для JSON-подобных структур: строк, чисел, массивов, словарей, бинарных данных, timestamp-значений и extension-значений.

Когда использовать MessagePack?

Используйте MessagePack для компактных API-пакетов, кеша, сообщений очередей и логов, когда обе стороны поддерживают MessagePack и нужна бинарная форма меньше JSON без смены модели данных.

MessagePack в JavaScript

import { encode, decode } from '@msgpack/msgpack';

const value = { hello: 'world' };
const bytes = encode(value);
const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');

console.log(hex);
// Output: 81a568656c6c6fa5776f726c64

console.log(decode(bytes));
// Output: { hello: 'world' }
				

MessagePack в Go

package main

import (
	"fmt"

	"github.com/vmihailenco/msgpack/v5"
)

func main() {
	value := map[string]any{"hello": "world"}
	encoded, _ := msgpack.Marshal(value)
	fmt.Printf("%x\n", encoded)
	// Output: 81a568656c6c6fa5776f726c64

	var decoded map[string]any
	_ = msgpack.Unmarshal(encoded, &decoded)
	fmt.Println(decoded["hello"])
	// Output: world
}
				

MessagePack в PHP

<?php
require 'vendor/autoload.php';

use MessagePack\MessagePack;

$value = ['hello' => 'world'];
$encoded = MessagePack::pack($value);
echo bin2hex($encoded) . PHP_EOL;
// Output: 81a568656c6c6fa5776f726c64

$decoded = MessagePack::unpack($encoded);
echo $decoded['hello'] . PHP_EOL;
// Output: world