ToolConvoyToolConvoyv2.6
DEV

MsgPack 检查器 — 解码与编码 MessagePack 二进制

解码与编码 MessagePack 二进制数据,提供十六进制视图。逐字节检查打包后的数据结构 —— 在浏览器中运行,无需上传。

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次
DEV

MsgPack Inspector

Decode .msgpack to JSON, encode JSON to MsgPack, view hex + decoded side-by-side. Runs locally.

● 本地运行 · 在您的标签页中生成页面加载以来工具发出的网络请求:0 次

Drop a .msgpack file

Or encode JSON → MsgPack
广告
广告

MessagePack 是为现代 Web 大量内部管道提供支撑的二进制序列化格式。Redis 用它来返回 Lua 脚本的结果;Fluentd 在把日志转发到聚合器前以 MessagePack 编码;Nginx 的 upstream 模块可以用 MessagePack 与后端服务通信;游戏引擎也拿它做网络包,毕竟每秒要发 60 次更新时,每个字节都得计较。这种格式紧凑、解析迅速,拥有 50 多种语言的实现 —— 但一个 MessagePack 二进制在 hex 编辑器里对人类来说完全是黑盒。检查器的价值就在于把字节解码成一棵带字节级标注、可逐项展开的 JSON 树,把这个鸿沟填平。

这种格式的巧妙之处在于它的前缀字节系统。每个值开头的第一个字节就告诉解码器接下来是什么:0x00–0x7f 是正整数,0xa0–0xbf 是短字符串(剩余的位表示长度),0x80–0x8f 是小 map,0x90–0x9f 是小数组。这意味着现实世界里大量 MessagePack 数据都能在一次扫描中完成解码,不需要预读,不需要回溯,也不需要为 schema 分配内存。检查器会在 hex 面板中把这些前缀字节高亮出来,让你可以直接「读」出这个格式。

在调试一个使用 MessagePack 的服务时,检查器的「往返能力」尤其重要。你可以捕获网络面板里的一段二进制响应,解码后看到服务器实际返回的内容,修改一个可疑字段,再重新编码,看修正后的二进制长什么样。hex 面板会把原始字节和重新编码后的字节并排显示,并把改动过的字节高亮出来。这是文本格式天然具备、二进制格式得自己搭出来的调试闭环。

广告

使用方法

  1. 粘贴 hex 或拖入二进制文件

    把 hex 字符串粘贴到输入区,或把 .msgpack 二进制文件拖入。工具会把 MessagePack 字节解码为可读的 JSON 树,并把每个元素的原始 hex 并排展示出来。

  2. 查看字节级视图

    在解码后的树中点击任意值,即可在 hex 面板中高亮显示它对应的字节。整数会显示其 fixint/uint/int 格式字节,字符串会展示长度前缀,map 会显示其键值对数量。

  3. 重新编码为 MessagePack

    编辑 JSON 树后点击 encode,即可生成新的 MessagePack 二进制。输出同时以 hex 和可下载的 .msgpack 文件形式给出。往返校验会自动确认编码过程是无损的。

常见问题

为什么用 MessagePack 而不是 JSON?

MessagePack 是一种二进制序列化格式,与等价的 JSON 相比,通常可以把负载缩小 30%–50%。它被 Redis、Fluentd、Nginx 以及游戏网络栈广泛采用。代价是可读性 —— MessagePack 二进制在文本编辑器里完全没法看,这正是检查器存在的意义。

MessagePack 在处理整数上和 JSON 有何不同?

MessagePack 使用变长编码:0–127 的整数只需一个字节(positive fixint),255 以内的整数用两个字节(uint 8),更大的整数占用更多字节。JSON 总是把整数存为十进制字符串。检查器会展示每个整数值的精确字节长度。

能解码部分或被截断的 MessagePack 流吗?

工具会以尽力而为的方式解码流中第一个完整的对象。如果流在某个对象中间被截断,解码器会在最后一个有效字节处停下,并在该截断处报告错误。对于 NDJSON 风格的 MessagePack 流,请先按对象边界切分,再用 NDJSON 校验器处理。

MessagePack 和 CBOR 有什么区别?

两者都是类 JSON 的二进制格式,但 CBOR (RFC 8949) 是面向 IoT 与受限设备设计的 IETF 标准,而 MessagePack 由社区驱动,主要为服务端场景优化。CBOR 原生支持 64 位整数和二进制字符串;MessagePack 这些场景要借助扩展类型。本工具只针对 MessagePack。

能否在解码后的树中修改某个值再重新编码?

可以。解码后 JSON 树中的每一个字段都可以就地编辑。改字符串、调整整数、往 map 里加键 —— 点 encode 后,工具就会产出带有你修改的合法 MessagePack 二进制。往返完整性会被自动校验。

限制说明

  • 不做流式解码工具会把整个二进制加载进内存再解码。对于需要增量处理的 GB 级 MessagePack 流,请使用支持流式解码的命令行工具。
  • 扩展类型以 hex 形式展示MessagePack 的扩展类型(格式码 0xc7、0xc8、0xc9)承载任意二进制 payload。检查器会把它们以 hex 块的形式展示,并附带类型编号标签,但除非识别出已知的扩展类型(如 timestamp、UUID),否则不会进一步解读。
  • 不做 schema 校验只要是合法的 MessagePack,检查器都会把它解码出来。它不会对照 schema 或类型定义做校验。如果需要 schema 感知的检查,请先解码,再用配套的 schema 校验工具处理。

平台说明

macOS
命令行检查方面,通过 Homebrew 安装的 `msgpack-tools` 提供了 `msgpack2json` 和 `json2msgpack`。如果是在浏览器 DevTools 的网络面板里检查一个 MessagePack 负载,本浏览器工具是更合适的选择。
Linux
`python3-msgpack` 软件包在命令行层面提供了 `msgpack2json`。本浏览器工具额外提供了 CLI 工具没有的 hex 视图侧栏与就地编辑能力。
Web
完全在客户端运行。二进制数据始终留在你的设备上。
广告
广告