跳到主要内容

配置简化:YAML To TOML — Numio

把单个 YAML 文档转换为 TOML。嵌套映射变为 [table.sub] 段,映射列表变为 [[array of tables]],值为 null(~)的键会被删除。

项目改用 pyproject.toml、Cargo、Hugo 或 Netlify 的 TOML 设置时,把 YAML 配置改写为 TOML。

YAML

TOML

适用场景

  • 项目改用 pyproject.toml、Cargo、Hugo 或 Netlify 的 TOML 设置时,把 YAML 配置改写为 TOML。
  • 选定配置格式之前,查看嵌套的 YAML 结构写成 TOML 表会是什么样子。

使用方法

  1. 将顶层为映射的单个 YAML 文档粘贴到左侧编辑器,或用加载文件按钮打开 UTF-8 文件。
  2. 修正提示的 YAML 错误(缩进、多个文档或顶层为列表)。
  3. 检查 TOML 中的日期、null 和列表,然后复制。

YAML

# docker-compose style
version: "3.9"
services:
  web:
    image: nginx:1.27
    ports:
      - "8080:80"
    environment:
      DEBUG: false
      WORKERS: 4
  db:
    image: postgres:16

TOML

version = "3.9"

[services.web]
image = "nginx:1.27"
ports = [ "8080:80" ]

  [services.web.environment]
  DEBUG = false
  WORKERS = 4

[services.db]
image = "postgres:16"

功能与限制

YAML 按 YAML 1.2 读取:yes 仍是字符串 "yes",0o17 变为 15,2024-01-05 这类不带引号的日期变为 TOML 字符串,而不是 TOML 日期。

注释和锚点不会原样保留:别名(*name)和 <<: *anchor 合并键会展开为所引用的值。

只接受一个文档;带有 --- 分隔符的输入会报多文档错误。顶层为列表,或映射与普通值混合的列表,会被拒绝并给出说明。

在浏览器中运行(yaml + @iarna/toml)。[services.web.environment] 这类子表缩进两个空格,TOML 会忽略这种缩进。

FAQ

可以把 docker-compose.yml 转换为 TOML 吗?

结构可以转换(如示例所示),但 Docker Compose 只读取 YAML。请用来查看或复用数据,不要当作 Compose 文件。

null 值会怎样处理?

值为 ~ 或 null 的键会被省略,因为 TOML 没有 null 类型。

支持 YAML 锚点和合并键吗?

支持。别名(*name)会展开,<<: *base 会把 base 的键复制到该映射中,与其并列写出的键优先。TOML 中显示的是合并后的值。

规范与参考资料