TOML 格式化工具

格式化并校验 TOML(Tom's Obvious, Minimal Language)。整齐对齐 key = value、表格与数组,并以行号提示语法错误。

TOML 的主要数据类型

类型 示例写法 说明
字符串(基本) "hello" 用双引号括起来,支持 \n、\t 等转义序列。
字符串(字面量) 'C:\path' 用单引号括起来,完全不进行转义处理,适合包含反斜杠的路径字符串。
整数 42 默认十进制,也支持 0x(十六进制)・0o(八进制)・0b(二进制),以及 1_000 这样的下划线分隔。
浮点数 3.14 指数记法(1e10)以及 inf・nan 也是有效值。
布尔值 true true 或 false 二选一,首字母大写(True)无效。
数组 [1, 2, 3] 在方括号内用逗号分隔多个值,允许末尾逗号。
表格 [server] 表头之后出现的所有 key = value 都属于该表格的子项。
表格数组 [[fruits-basket]] 通过重复同名表格来表示数组(例如多个依赖包的定义)。
日期/时间 1979-05-27T07:32:00Z RFC 3339 格式,是唯一可以不加引号书写的复合类型值。

使用技巧

  • 内联数组和内联表仅支持写在一行内的形式。如果数组跨越多行,请先合并为一行再粘贴。
  • 格式化结果会将「=」两侧统一为一个半角空格,并将数组/内联表的分隔符统一为「, 」,从而消除不同书写者之间的格式差异。
  • 注释(# 之后的内容)会被保留,唯一的改动是在「#」之后缺少空格时补上一个空格,改动幅度很小。
  • 连续的空行会被合并为一行输出,让各个表格之间的分界更容易辨认。
  • 本工具的所有处理都在浏览器内完成,您粘贴的配置内容不会被发送到任何服务器。

常见问题

如果内容以简单的键值对为主,且由多人共同编辑(如依赖关系定义),TOML 更合适,因为缩进失误很少会破坏结构。如果需要深层嵌套或在一个文件中组合多份文档,YAML 的表现力更强。

本工具会正确格式化每一个 [[section]] 表头,但不会像完整的 TOML→JSON 转换器那样,把同名的多个表格合并成一个数组对象。对于复杂的表格数组结构,建议直接查看逐行格式化后的结果来确认。

本工具会按 RFC 3339 语法识别并原样输出该值,但不会校验其在日历上是否真实存在(例如「2 月 30 日」这样的非法日期)。如需严格的日期校验,请另行确认。

目前尚不支持 """..."""'''...''',对应的行会被判定为错误。如需处理长文本,请先转换为可写在一行内的转义字符串格式。

不会。所有格式化处理都在您的浏览器内通过 JavaScript 完成,不会发送到服务器或被保存,因此即使配置文件中包含凭据信息也可以放心使用。
ツールくん

闲话 ― TOML 为何成为配置文件的「通用语言」

TOML 由 GitHub 联合创始人 Tom Preston-Werner 于 2013 年提出,其全称「Tom's Obvious, Minimal Language」直接体现了设计理念:既要像 JSON 一样便于机器解析,也要让人类可以毫无歧义地直接阅读和书写。

真正让 TOML 普及开来的关键,是 Rust 的包管理器 Cargo 采用 Cargo.toml 作为其配置文件格式。此后,Python 的 PEP 518 又引入了 pyproject.toml 作为打包标准,将此前 setup.py、setup.cfg、requirements.txt 各自为政的局面统一了起来。

TOML 与 YAML 最大的区别在于「不赋予缩进任何意义」。YAML 中细微的缩进偏差很容易导致语法错误或数据结构被误解析,而 TOML 仅通过 [section]key = value 的组合来表达层级,因此复制粘贴导致的失误相对更少。

不过 TOML 的表现力也因此略逊于 YAML:它没有用于复用数值的锚点/别名机制,书写深层嵌套结构也偏繁琐,实际工作中往往需要根据数据结构在 TOML、YAML、JSON 之间做出取舍。

→ 查看全部趣味知识