MessagePack 解析器

MessagePack 是一种高效的二进制序列化格式,类似 JSON 但更小更快。它被用于 Redis、Fluentd 和许多 RPC 系统。此工具解析 MessagePack 文件,并以带有类型和大小元数据的 JSON 形式显示内容。

规范

常见用例

  • 调试 MessagePack 编码的 API 响应
  • 检查使用 MessagePack 序列化的 Redis 缓存数据
  • 分析 Fluentd 日志消息
  • 将 MessagePack 转换为 JSON 用于日志记录或调试
  • 理解 MessagePack 格式的 RPC 载荷

功能

  • 通过拖放或文件选择解析 MessagePack 二进制文件
  • 解码十六进制编码的 MessagePack 数据
  • 支持所有 MessagePack 类型,包括扩展类型
  • 转换为 JSON 以提高可读性
  • 显示文档元数据(大小、类型计数、最大深度)
  • 显示扩展类型信息
  • 处理二进制数据和时间戳
  • 用于原始二进制检查的十六进制查看器

示例

简单 MessagePack

试试看 →

一个包含两个字段的 MessagePack 映射:{"hello":"world","count":42}

82 a5 68 65 6c 6c 6f a5 77 6f 72 6c 64 a5 63 6f 75 6e 74 2a

十六进制编码的 MessagePack

试试看 →

一个包含字符串、数字和布尔值的 MessagePack 映射:{"name":"Alice","age":30,"active":true}

83 a4 6e 61 6d 65 a5 41 6c 69 63 65 a3 61 67 65 1e a6 61 63 74 69 76 65 c3

提示

  • 你可以直接粘贴十六进制编码的 MessagePack 数据来解析。
  • MessagePack 通常是等效 JSON 大小的 50-80%。
  • 扩展类型(负类型码)是应用程序定义的。
  • 时间戳使用扩展类型 -1,有多种精度格式。
  • 某些实现使用扩展类型 1 表示时间戳。

理解 MessagePack 解析器

MessagePack 是一种二进制序列化格式,旨在尽可能紧凑,同时保持与 JSON 兼容的数据模型。由古桥贞之创建,MessagePack 使用自描述的二进制格式编码数据,其中类型信息和数据交错排列,允许无需外部 Schema 即可高效解析。

该格式使用可变长度编码方案。小整数(0-127)仅占一个字节。短字符串在类型字节中包含其长度。映射和数组使用紧凑的长度前缀。这种设计通常产生等效 JSON 大小 50-80% 的载荷,并且由于没有文本解析开销,序列化和反序列化速度显著更快。

MessagePack 支持 nil、布尔值、整数(有符号和无符号最高 64 位)、浮点数(32 和 64 位)、字符串、二进制、数组、映射和扩展类型。扩展类型允许应用程序定义自定义类型——时间戳扩展(类型 -1)是唯一标准化的扩展。几乎每种编程语言都有库,具有一致的跨语言兼容性。

MessagePack 用于 Redis(作为可选的序列化格式)、Fluentd(日志转发)、SignalR(实时 Web)以及许多带宽和解析速度重要的 RPC 系统和游戏网络协议。当需要 JSON 兼容性但文本序列化开销过高时,它是一个好选择。

MessagePack 最适合带宽或解析速度至关重要的场景:实时通信、高吞吐量 API、游戏网络、物联网设备和缓存层。当人类可读性重要时,对于配置文件或与期望基于文本格式的系统互操作时,JSON 仍然是更好的选择。

与 Protocol Buffers 相比,MessagePack 像 JSON 一样是无 Schema 的——数据是自描述的,可以无需预定义 Schema 即可序列化。Protocol Buffers 需要 .proto Schema 文件编译成语言特定代码,但产生更小的载荷并提供更强的类型安全。MessagePack 更适合无 Schema 的动态数据,而 Protobuf 在需要最大效率的明确定义的 API 契约中表现出色。

扩展类型允许应用程序定义超出内置集的自定义数据类型。每个扩展有一个类型码(-128 到 127)和任意二进制数据。时间戳扩展(类型 -1)是唯一标准化的扩展,表示纳秒精度的时间戳。应用程序可以为 UUID、BigDecimal 或领域特定对象等类型定义自己的扩展。

← 返回所有工具