跳到主要内容

跨格式配置:TOML To YAML — Numio

把 TOML 文档转换为 YAML。表变为嵌套映射,[[array of tables]] 变为映射列表,只在 YAML 需要时才加引号(例如 "2021" 仍是字符串)。

把 TOML 配置(Cargo、pyproject、Hugo)中的设置迁移到 CI 工作流或 Kubernetes 清单等基于 YAML 的工具。

TOML

YAML

适用场景

  • 把 TOML 配置(Cargo、pyproject、Hugo)中的设置迁移到 CI 工作流或 Kubernetes 清单等基于 YAML 的工具。
  • 以缩进树的形式阅读包含点号键和嵌套表的长 TOML 文件。

使用方法

  1. 将 TOML 文档粘贴到左侧编辑器,或用加载文件按钮打开 UTF-8 文件。
  2. 如果出现错误,根据提示的行号和列号查找重复的键或语法问题。
  3. 检查 YAML 中的日期时间和带引号的值,然后复制。

TOML

# Cargo-style manifest
[package]
name = "demo"
version = "0.1.0"
edition = "2021"

[dependencies]
serde = { version = "1.0", features = ["derive"] }

[[bin]]
name = "cli"
path = "src/main.rs"

YAML

package:
  name: demo
  version: 0.1.0
  edition: "2021"
dependencies:
  serde:
    version: "1.0"
    features:
      - derive
bin:
  - name: cli
    path: src/main.rs

功能与限制

注释会被删除。带偏移量的日期时间会转换为 UTC(2024-01-05T10:00:00+09:00 变为 2024-01-05T01:00:00.000Z),并补上毫秒。

输出遵循 YAML 1.2,因此 yes、on 这类字符串不加引号。YAML 1.1 解析器(例如 PyYAML)可能把它们读作布尔值;如有需要请手动加引号。

09:00:00 这样的本地时间会带上毫秒(09:00:00.000);本地日期和本地日期时间不带时区。

在浏览器中运行(@iarna/toml、yaml、Prettier);inf 和 nan 变为 .inf 和 .nan。

FAQ

注释会保留吗?

不会。TOML 会先解析为数据,注释和空行都会丢失。重要的注释请手动复制过去。

[[array of tables]] 如何转换?

每个 [[bin]] 块变为 bin 下 YAML 列表中的一项,如示例所示。

为什么会出现 "Can't redefine existing key"?

同一个键或表被定义了两次,TOML 不允许这样做。错误会给出第二次定义所在的行号和列号。

规范与参考资料