跳到主内容
UniKit

YAML 转 TOML

把 YAML 转成 TOML(js-yaml + smol-toml):遇到 null、顶层数组、混合类型数组会给出清晰提示与替代建议,非法 YAML 直接报错,并支持按键排序与结果统计。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

YAML 源文
选项

校验与提示

TOML 输出

字节数: 131
features = [ "markdown", "robots" ]

[build]
minify = true
target = "es2022"

[server]
host = "127.0.0.1"
port = 8080
timeout = 30

统计

键数量6
根级键1
表 / 数组表2
行数10
字节数131

这个工具能做什么

  • 把 YAML 写的配置(Cargo.toml 风格的构建配置、Rust / Python 项目配置)转成 TOML,省掉逐行改语法。
  • 写 pyproject.toml 或 Cargo.toml 前先用 YAML 草拟结构,确认无误后再转成 TOML 粘进项目。
  • 转换前会先校验 TOML 表达不了的地方:null、顶层数组、超出 64 位的整数、混合类型数组都会明确指出来,而不是生成一份有问题的文件。
  • 需要稳定 diff 时勾选「按键名排序」,生成的 TOML 每次顺序一致。

示例

输入

server:
  host: 127.0.0.1
  port: 8080
  timeout: 30
features:
  - markdown
  - robots
build:
  target: es2022
  minify: true

输出

features = [ "markdown", "robots" ]

[server]
host = "127.0.0.1"
port = 8080
timeout = 30

[build]
target = "es2022"
minify = true

数组键会被提到文件开头(TOML 要求简单键在表之前),嵌套对象变成 [server] / [build] 表。统计面板显示 6 个键、2 个表。

常见问题

为什么有的键在文件最前面?

TOML 规定简单键值必须出现在表之前,否则后面的键会被归到上一张表里。序列化器把 features 这种数组提到开头,正是为了满足这个规则,输出可以直接被解析。

YAML 里的 null 怎么处理?

TOML 没有 null,所以含 null 的键会作为阻断性问题列出来(路径形如 server.port),此时不会输出 TOML。把键删掉,或改成空字符串 / false 再转。

顶层是数组或纯标量的 YAML 能转吗?

不能。TOML 文档的顶层必须是一张表,所以顶层数组或裸标量会提示 not-a-map,需要自己包一层键名(例如 value: ...)。空文档或只有注释的 YAML 也会被单独提示。

混合类型的数组为什么只是警告?

TOML 1.0 允许数组里混用类型,但只认 TOML 0.5 的老解析器会报错。默认只给警告并照常输出;勾选「严格数组类型」后它会变成阻断性错误,方便提前适配老工具链。

大整数和日期怎么办?

超过 JavaScript 安全整数范围(2^53-1)的整数会提示精度已经丢失,建议在 YAML 里加引号写成字符串;超过 64 位有符号范围则是阻断性错误。日期(YAML timestamp)会写成 TOML 的日期时间或字符串,生成的 TOML 会用 smol-toml 回读自检。

关键词:yaml to tomlyamltomlconverterserializationYAML 转 TOML配置转换键排序TOML 生成

同类工具