1001Ferramentas
🔄Conversores

Conversor MessagePack para JSON (texto)

Explica o formato binário MessagePack, suas vantagens e como traduzir para JSON textual com exemplos.

Cole os bytes MessagePack em hex. Bin vira 0x…; ext vira {$ext, data}. Inteiros de 64 bits podem perder precisão acima de 2⁵³.

MessagePack é um formato binário compacto e mais rápido que JSON em transferência. Tipos suportados incluem int, float, string, bin, array, map e ext.

Para converter use bibliotecas como @msgpack/msgpack (JS) ou msgpack (Python). Bytestrings são serializadas em base64 ao virar JSON.

Decodificando um payload MessagePack na mão

MessagePack costuma sair de um Redis, de um WebSocket ou de um cache que alguém configurou anos atrás, e nessas horas você tem um blob binário e nenhuma documentação. Se conseguir transformar esse blob em hexadecimal, esta página faz o resto: cole os bytes e veja o JSON correspondente. O exemplo 82a16101a162920203 abre um mapa com dois campos, a igual a 1 e b igual à lista 2, 3.

O decodificador cobre a família toda de prefixos: fixint positivo e negativo, fixstr, fixmap, fixarray, str de 8, 16 e 32 bits, bin, array e map grandes, floats, inteiros com e sem sinal, além dos tipos de extensão. Blobs bin viram texto começando em 0x, e um ext vira um objeto com os campos $ext e data. Isso vale inclusive para o timestamp padrão, que tem tipo -1 e continua como bytes, sem virar data.

Cuidado com inteiros grandes: um uint64 no valor máximo sai como 18446744073709552000, arredondado, porque o resultado passa por número JavaScript. O texto explicativo da própria página fala em base64 para bytestrings, mas a saída real usa hexadecimal. E o caminho é de mão única, não existe conversão de JSON de volta para MessagePack aqui. Para volume ou round-trip fiel, use @msgpack/msgpack. Nada sai do navegador.

Perguntas frequentes

Dá para converter JSON de volta para MessagePack?
Não aqui. Esta página só decodifica bytes em hexadecimal para JSON.
Por que o timestamp virou um objeto com $ext?
O timestamp do MessagePack é uma extensão de tipo -1, e as extensões são devolvidas cruas, com o tipo e os bytes em hexadecimal, sem interpretação.
Posso confiar em inteiros de 64 bits?
Até 2 elevado a 53 sim. Acima disso o valor é arredondado, porque a saída passa por número JavaScript.

Ferramentas Relacionadas