YAML & TOML 配置完整指南

Free Kubernetes · Docker · Rust · Python · GitHub Actions No signup · No data stored · Works offline

本指南涵盖的工具

YAML Formatter & Validator
Format Kubernetes, Docker & CI/CD YAML
YAML to JSON Converter
Resolve anchors and convert to JSON
TOML Formatter & Validator
Format Cargo.toml and pyproject.toml
TOML to JSON Converter
Convert TOML configuration to JSON
JSON to YAML Converter
Convert JSON config to YAML format
JSON to TOML Converter
Convert JSON to Rust/Python config
Cron Expression Generator
Build cron schedules for CI/CD pipelines
Regex Tester
Test patterns used in config templating
Last updated: March 2026  ·  v1.0
Quick Answer
YAML和TOML有什么区别,分别在什么时候使用?

YAML和TOML都是人类可读的配置格式,但适用场景不同。5个关键区别:

  1. 使用YAML:Kubernetes、Docker Compose、GitHub Actions——当工具要求时。
  2. 使用TOML:Cargo.toml(Rust)、pyproject.toml(Python)——当人工直接编辑配置时。
  3. YAML用缩进表示层级;TOML用显式的[section]标题。
  4. TOML是强类型的;YAML 1.1会悄悄地将yes/no转换为布尔值。
  5. YAML中的Tab字符总是导致解析错误——只能使用空格。

配置文件决定了你的软件在各个环境中的行为方式。YAML 和 TOML 已成为现代开发者工具链的主流格式:Kubernetes 使用 YAML,Rust 的 Cargo 使用 TOML,Python 打包也在 pyproject.toml 中采用了 TOML。本指南涵盖你需要了解的两种格式、它们的常见陷阱,以及如何在两者之间转换数据。

面向 Kubernetes 和 Docker 的 YAML 基础

YAML(YAML Ain't Markup Language)用缩进表示层级——没有花括号或方括号。这让它读起来很清爽,但也因对空白错误极其敏感而出了名。

缩进规则:YAML 只使用空格——绝不能用 Tab。同一文档内空格数必须一致(每级 2 或 4 个空格是标准做法)。YAML 文件中任何位置出现一个 Tab 字符都会导致解析错误。

键值对:写作 key: value,冒号后必须有一个空格。漏掉空格(key:value)是常见错误。

字符串:大多数字符串不需要引号。当值包含特殊字符,或可能被误判为布尔值时,才需要加引号。YAML 1.1 会把 yesnotruefalseonoff 视为布尔值。

多文档 YAML:--- 在单个文件中分隔多个文档——这在定义多个资源的 Kubernetes 清单中很常见。

Kubernetes 和 Docker Compose 中常见的 YAML 错误

Tab 字符——最常见也最难发现。请配置你的编辑器显示空白字符,并对 YAML 文件强制只用空格。

缩进不一致——在同一文件中混用 2 空格和 4 空格缩进会造成无声的结构错误。使用我们的 YAML 格式化工具,一键规范化缩进。

隐式类型转换——YAML 1.1 把 yes/no/on/off 视为布尔值,把裸数字视为整数或浮点数。端口值 0800 会被解析成八进制的 512。含糊的值请务必加引号。

锚点与别名错误——YAML 的锚点(&name)和别名(*name)功能强大但容易让人困惑。我们的 YAML 转 JSON 工具会解析锚点并展示完全展开后的结果。

TOML:面向 Rust 和 Python 的配置格式

TOML(Tom's Obvious Minimal Language)专为人工直接编辑的配置文件而设计。与 YAML 不同,TOML 没有歧义——不会数错缩进,也没有隐式类型转换。

分节:TOML 使用 [section] 标题而非缩进。一个 Cargo.toml 文件包含 [package][dependencies][dev-dependencies] 等小节。

表数组:[[table]] 语法会创建一个对象数组——用于 Cargo.toml 中多个二进制目标之类的场景。

类型:TOML 是强类型的。它区分整数、浮点数、布尔值、字符串、日期时间、数组和内联表。没有隐式转换——port = 8080 永远是整数。

注释:与 JSON 不同,TOML 支持用 # 写注释。这让它非常适合需要在行内说明每项设置的配置文件。

配置该用 YAML、TOML 还是 JSON?

使用 YAML 的场景:工具要求使用它时(Kubernetes、Helm、Ansible、大多数 CI/CD 系统)、需要注释和锚点时,或配置主要由机器读写时。

使用 TOML 的场景:由人工直接编辑文件、正确性比紧凑更重要时。Rust 的 Cargo.toml、Python 的 pyproject.toml 和 Hugo 的 config.toml 都是典型例子。

使用 JSON 的场景:配置由 JavaScript/Node.js 代码消费时(package.jsontsconfig.json),或需要一种解析器支持最广、尽可能简单的格式时。

在这些格式之间转换很简单:我们的 JSON 转 YAMLJSON 转 TOMLYAML 转 JSONTOML 转 JSON 工具都在你的浏览器中完成转换。

关于 YAML 和 TOML 的常见问题

为什么我的 Kubernetes YAML 在本地能用,在 CI 里却失败?

最常见的原因是 Tab 与空格的缩进问题。有些编辑器会悄悄插入 Tab。提交前,用我们的 YAML 格式化工具处理一下你的 YAML,把空白规范化。

YAML 可以加注释吗?

可以。YAML 用 # 支持注释。从 # 到行尾的所有内容都会被忽略——这是 YAML 作为配置文件相比 JSON 的主要优势之一。

TOML v0.5 和 TOML v1.0 有什么区别?

TOML v1.0(2021 年发布)厘清了多行字符串、Unicode 键名和日期时间格式等边界情况。大多数现代工具(Cargo 1.54+、Python 的 tomllib)使用 v1.0。我们的格式化工具符合 v1.0 规范。

如何把 Kubernetes YAML 清单转换为 JSON?

使用我们的 YAML 转 JSON 工具。粘贴你的清单并点击「转换」。输出是 kubectl 和大多数 Kubernetes 客户端都接受的有效 JSON。

为什么 pyproject.toml 用 TOML,而不是 JSON 或 YAML?

Python 打包社区选择 TOML,是因为它支持注释(不像 JSON)、没有歧义(不像 YAML 的隐式类型),且对人友好。PEP 518(2016 年)为此指定了 TOML。