YAML TOML 转换器

即时进行 YAML 与 TOML 格式双向转换。支持嵌套对象、表格数组和常见数据类型。免费在线工具,在浏览器中处理,无需上传。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
交换 YAML 与 TOML 整个面板的位置,标签与原文一起移动,并聚焦新的第一个面板。等待执行的转换会取消;交换本身不转换内容。
清空两个面板、状态和等待执行的转换。焦点在工具内时,Ctrl+L(Mac 为 ⌘+L)也会清空。
粘贴一个以映射为根的 YAML 文档。停止输入 0.3 秒后更新 TOML。TOML 无法原样保存的值会停止转换,并按字段路径列出。
复制 YAML 面板当前的全部文本,包括您编辑的内容。面板为空时无法复制。
在此粘贴 TOML。停止输入 0.3 秒后更新 YAML,使用两个空格缩进,不折叠长行。遇到 YAML 无法原样保存的值时停止转换。
复制 TOML 面板当前的全部文本,包括您编辑的内容。面板为空时无法复制。
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

转换示例

YAML 输入

database:
  host: localhost
  port: 5432
  enabled: true
tags:
  - web
  - backend

等效 TOML 输出

tags = [ "web", "backend" ]

[database]
host = "localhost"
port = 5432
enabled = true

日期和时间

YAML 时间戳写成 TOML 日期,不写成字符串:

release:
  date: 2026-10-01
  at: 2026-10-01 09:30:00 +9
  utc: 2026-10-01T00:30:00Z
  label: "2026-10-01"
  ratio: .inf
[release]
date = 2026-10-01
at = 2026-10-01T09:30:00.000+09:00
utc = 2026-10-01T00:30:00.000Z
label = "2026-10-01"
ratio = inf

只有日期时写成 TOML 本地日期。日期时间保留偏移,写成 +09:00;没有偏移的日期时间写成 Z,因为 YAML 时间戳类型把它读作 UTC。加引号的 “2026-10-01” 仍是字符串,.inf 写成 TOML 的 inf。TOML 日期只保留到毫秒,09:30:00.123456Z 这类更精确的时间戳和 2026-02-31 这类不存在的日期会停止转换。

反方向时,TOML 解析器只保留到毫秒、舍去后面的位数,所以更精确的时间会停止 TOML → YAML:[build] 表里的 started = 2026-10-01T09:30:00.123456Z 得到 未转换:YAML 无法原样保存下列值:/build/started:2026-10-01T09:30:00.123456Z 的精度超过毫秒。TOML 本地日期时间没有偏移,而 YAML 把不带偏移的时间戳读作 UTC,所以 [build] 表里的 started = 2026-10-01T09:30:00 也会停止:未转换:YAML 无法原样保存下列值:/build/started:2026-10-01T09:30:00 是本地日期时间,YAML 会把不带偏移的时间读作 UTC。YAML → TOML 时,YAML 的 -0.0 写成 TOML 的 -0.0,保留负号;ratio: 1.0 这样的整数值浮点数仍写成浮点数(ratio = 1.0)。

TOML 无法保存的值

值在转换中会改变时,工具不转换,状态栏按 JSON Pointer 列出每个字段和原因:

service:
  id: 9007199254740993
  owner: ~

未转换:TOML 无法原样保存下列值:/service/id:整数 9007199254740993 超出 ±(2^53 − 1),JavaScript 会把它四舍五入;/service/owner:null,TOML 没有 null

TOML 面板被清空,复制按钮停用,不会误复制旧结果。给大 ID 加引号(id: "9007199254740993"),替换或删除 null 后再转换。−(253 − 1) 到 253 − 1 之间的整数原样转换。

限制

  • 根必须是映射,一次一个文档。含 --- 的多文档输入会报错 expected a single document in the stream, but found more。
  • 两个方向都拒绝大整数。TOML → YAML 时 big = 9007199254740993 报错 integer value cannot be represented losslessly 并标出行;YAML → TOML 时按上文列出字段。
  • js-yaml 的处理上限。js-yaml 4.3.2 遇到嵌套超过 100 层、合并键(<<)累计处理的映射和键超过 10,000 个、一个合并键列出超过 100 个映射的文档会停止,错误信息写明上限和行列。
  • 注释不保留,锚点会展开。

YAML 与 TOML 对比

YAML 以其人性化的缩进语法,广泛用于应用配置(Docker Compose、Kubernetes、GitHub Actions)。 TOML 是 Rust 项目(Cargo.toml)、Python 打包(pyproject.toml)以及 Hugo、Zola 等工具的标准配置格式。 本工具在两者之间对两种格式共同支持的数据类型进行转换。

FAQ

支持哪些数据类型?

字符串、整数、浮点数(含 inf 和 nan)、布尔值、数组、嵌套对象和日期均双向支持。YAML 日期(如 2026-10-01)写成 TOML 本地日期,YAML 日期时间保留时区偏移。YAML 锚点和别名在转换前会自动展开。TOML 的日期时间写成不带引号的 ISO 8601 值(如 2026-10-01T09:30:00.000+09:00),YAML 解析器一般会把它读成时间戳。

为什么 YAML 转 TOML 失败?

TOML 要求根文档必须是键值映射,根为序列(列表)或标量的 YAML 无法转换。另外,值在转换中会改变时,工具不转换,并按路径(如 /service/owner)列出每个字段:null(TOML 没有 null)、超出 ±(2^53 − 1) 的整数、精度超过毫秒的时间戳、不存在的日期。此时 TOML 面板被清空,复制按钮停用,直到输入可以转换。

支持 YAML 多文档流吗?

不支持。仅支持单文档 YAML。含多个文档(用 --- 分隔)时会报错「expected a single document in the stream」,请一次只粘贴一个文档。

数据会发送到服务器吗?

不会。所有转换在浏览器中运行,数据不会离开您的设备。