免费在线 YAML 格式化与验证工具
在浏览器中格式化、验证和美化 YAML,并在 YAML 与 JSON 之间互相转换。支持 Docker Compose、Kubernetes 和 GitHub Actions 配置。任何内容都不会发送到服务器。
所有解析和转换都在您的浏览器本地完成。您的 YAML 和 JSON 绝不会被上传、存储或记录。
什么是 YAML?
YAML(YAML Ain't Markup Language)是一种易于人类阅读的数据序列化格式,设计上便于书写和阅读。它简洁、基于缩进的语法在许多现代配置文件中取代了 XML,为 Docker Compose、Kubernetes、GitHub Actions、Ansible 和 Helm 等工具提供支持。YAML 还是 JSON 的超集,因此每个有效的 JSON 文档也是有效的 YAML,这使得对大多数日常配置数据而言,在两种格式之间转换既简单又无损。
YAML 语法指南
| key: value | 标量 —— 简单的键/值对。多行字符串使用 |(字面量,保留换行)或 >(折叠,合并行)。 |
| - item | 列表 —— 每一项单独一行,以短横线加一个空格开头。 |
| parent: child: x | 嵌套字典 —— 完全通过缩进来表达层级关系。 |
| # comment | 注释 —— # 之后的内容都会被解析器忽略。 |
| null / true / false | 特殊值 —— null、true 和 false 被识别为带类型的值,而不是字符串。 |
| &anchor / *alias | 锚点与别名 —— 用 &anchor 定义一个节点一次,用 *alias 重复引用它。 |
重要提示:YAML 不允许使用制表符缩进,只能用空格。仅一个制表符就会使整个文档无效。
YAML 与 JSON:何时用哪个
YAML
对于手写和手动编辑的配置文件,使用 YAML。它支持注释、更易读,并且是 Docker Compose、Kubernetes、GitHub Actions、Ansible 和 Helm 的标准格式。
JSON
对于 API 和传输中的数据,使用 JSON。它解析更快、没有类型歧义,是 REST API、package.json 和 tsconfig.json 背后的格式。
常见 YAML 错误及修复方法
- 用制表符而非空格缩进 —— 将每个制表符替换为空格,因为 YAML 禁止使用制表符。
- 缩进不一致 —— 在整个文档中,每个嵌套层级都保持相同数量的空格。
- 包含冒号的字符串未加引号 —— 将 "12:30" 或 "http://example.com" 这类值用引号括起来。
- 含义模糊的布尔值 —— yes、no、on、off 等值会被解析为 true/false;若你想要字面单词,请加引号。
- 值中的特殊字符未加引号 —— @、# 和 { 等字符需要将整个值用引号括起来。
常见问题
不可以。YAML 严格禁止用制表符缩进——必须使用空格。这是"YAML 无效"错误最常见的原因之一。如果你的编辑器插入了制表符,请将其配置为把制表符转换为空格(通常每级 2 个)。本页的格式化工具始终输出空格,因此将文件用它处理一遍,就能自动修复意外的制表符。
两者都用于引入多行字符串,但处理换行的方式不同。字面量块标量 | 完全按书写保留换行,因此每一行都独立成行——非常适合脚本或带格式的文本。折叠块标量 > 用空格将各行连接起来,把整块合并为一行,同时将空行视为段落分隔——适合你希望在源文件中换行、但存储为一行的长段文字。
是的。从 YAML 1.2 起,每个有效的 JSON 文档也都是有效的 YAML 文档,因为 YAML 的流式语法使用与 JSON 相同的花括号、方括号和引号规则。这意味着你可以把 JSON 直接粘贴进 YAML 解析器并正常工作,也使两种格式之间的转换更可靠——这正是本页 YAML 转 JSON 和 JSON 转 YAML 选项卡所做的事。
YAML 解析器会把一系列单词——yes、no、on、off、true、false——解释为布尔值。因此未加引号的标量 yes 会被读作布尔值 true,并在 JSON 中如此序列化。如果你需要字面字符串 "yes"(例如国家代码或答案字段),请加引号:answer: "yes"。引号会强制解析器将其保留为文本,而不是转换为布尔值。