YAML 转 TOML

转换器

把 YAML 转为 TOML,将缩进语法映射为强类型表结构,适合把 K8s 与 CI 配置迁移到 Rust、Python 项目,保留嵌套与类型语义。缩进层级会映射为表与嵌套表,数组按元素类型决定是否转为数组表。空值需显式处理,因为对方格式没有空值类型。缩进层级映射为表与嵌套表,空值需显式处理。

已转换
YAML
16 行
TOML
14 行

关于 YAML 转 TOML

YAML 与 TOML 都是为人类编写的配置格式,但取向不同:YAML 用缩进表达层级、支持锚点复用与多文档,表达力更强也更容易写错;TOML 用显式的段头与键值对,结构边界清楚,机器与人都更容易判断「这一行属于哪里」,因此在新一代工具链里被广泛采用。 转换原理是把源格式解析成对象树,再按目标格式的规则重新输出。真正需要注意的不是语法而是两种格式对数据类型的处理:YAML 有一批隐式类型规则,不加引号的数字、布尔值乃至日期都可能被自动识别;TOML 的类型同样有约定,但日期时间是一等类型。同一份配置在两种格式间的往返转换里,若源文件缺少引号,类型可能在往返中发生变化。 使用要点:转换前先用引号把「看起来像数字或布尔值但其实是标识」的字段固定成字符串,例如版本号、以零开头的编号、以及取值恰好是 yes 或 no 的枚举。转换后务必对比字段总数与嵌套层级,确认没有因为数组与表结构的差异而丢层或错层——YAML 的序列在 TOML 里要用双方括号表示,这一处最容易在自动转换中出错。 边界与限制:两种格式的注释都会在转换中丢失,需要保留说明时应把说明写进字段值或另存文档。YAML 的锚点与别名在转换到 TOML 时会被展开成重复内容,文件体积增大但语义不变;多文档的 YAML 必须拆成多个文件,因为 TOML 没有对应的顶层多文档结构。此外空值与默认值的表示不同,某些解析器会把空字符串与「未设置」区分对待,跨格式迁移时应显式写出期望值而不是依赖缺省行为。 数据与隐私:需要转换的配置通常包含数据库连接串、第三方密钥与内网地址,属于最不该离开本机的一类材料。本工具在浏览器内完成解析与序列化,不上传文件内容,也不需要联网;转换完成后建议核对输出里有没有本应被环境变量替代的明文密钥。

在工程实践上还有两点经验。第一,如果同一份配置要在两种格式间长期共存,应指定一种为唯一真源,另一种由脚本生成并标记为「请勿手工编辑」,否则两边各自修改后必然产生难以察觉的漂移。第二,转换应纳入提交前检查:把源文件与生成结果都提交,并在流水线里重新生成一次并比对,若结果不一致就说明有人改了生成结果,这比事后逐字段核对更省力。配置类问题往往在生产环境才暴露,把这类机械核对自动化,收益远高于多加几行注释。

上手时建议先用一份结构简单的配置跑通全流程,确认缩进、数组与日期这几类边界都符合预期,再处理生产配置。维护上有一件事值得坚持:转换脚本与源配置放在同一个仓库并一起提交,这样任何一次配置变更都能通过历史看到源文件与产物是否同步,遇到线上异常时可以快速判断是配置写错了还是转换过程引入了偏差,比凭印象排查可靠得多。

实现原理

转换解析源格式为对象树,再按目标规则输出。两种格式的差别落在结构的表达方式上:YAML 用缩进隐含层级,TOML 用段头显式声明路径。因此标量数组在 TOML 里用单方括号、对象数组用双方括号,这一处判断错误会产出无法解析的文件,转换后应用解析器回读一遍确认。

序列与表数组
输入tags: - a - b items: - {id: 1}
输出tags = ["a", "b"] [[items]] id = 1

使用方法

  1. 打开「YAML 转 TOML」
  2. 选择源格式与目标格式
  3. 根据需要调整输出选项
  4. 点击「转换」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 整理工具配置 — 把分散的 YAML 配置项收敛进 Rust/Python 项目的单一 TOML 文件。
  • 格式标准化 — 团队规定用 TOML 后,将历史 YAML 配置统一转换。
  • 语法学习 — 对照 YAML 与 TOML,理解表数组等 TOML 特有结构。
  • 配置精简 — 把层级过深的 YAML 重新组织成 TOML 的扁平表结构。
  • 生成示例 — 在文档里同时提供 YAML 与 TOML 版本供读者参考。
  • 迁移 CI 变量 — 把 GitHub Actions 工作流的输入转成 TOML,集中到 pyproject.toml 维护。

常见问题

YAML 的 null 会怎样?

TOML 没有 null。值为 null 的键在转换时会被跳过,请留意这些字段会从结果中消失。

YAML 锚点会被保留吗?

不会。锚点和引用会先展开成实际内容再转 TOML,因为 TOML 不支持引用机制。

对象数组转成什么?

转成 TOML 的表数组 [[name]],每个数组元素对应一个表块。

为什么有些键被加了引号?

当键名含点号、空格等特殊字符时,TOML 要求用引号包裹,本工具会自动处理。

YAML 的多行字符串怎么处理?

长文本会转成 TOML 的三引号多行字符串,保留原有换行结构;需要折叠的行则用行尾反斜杠处理。

想用 JSON 做中转?

可先用「YAML 转 JSON」再用「JSON 转 TOML」,分两步更可控。

深层嵌套被拆成很多 [a.b.c] 段?

TOML 用点分表头表达嵌套,四层以上的嵌套会展开成多个段标题,视觉上比 YAML 啰嗦但语义相同。若嵌套过深影响可读性,考虑改存 JSON——TOML 的设计初衷是配置文件而非任意数据交换。

数组里的对象转换后顺序变了?

TOML 的 [[array]] 段按出现顺序即数组顺序,不会重排。若你看到顺序变化,多半是查看器按字母排了键;用文本编辑器直接看输出文件确认,而不是依赖带排序的预览。

广告