YAML 讲解 + JSON vs. YAML
更新 2026-07-06
如果你编辑过 Docker Compose、GitHub Actions、Kubernetes 这类现代工具的配置文件,你就已经写过 YAML 了。它被设计成对人最易读的数据格式,但这份易读也带着几处锋利的边角。本指南讲解 YAML 如何工作、要留意的陷阱,以及它与 JSON 如何对比。
YAML 是什么
YAML(“YAML Ain’t Markup Language”)是一种数据格式,表示的东西与 JSON 相同 —— 键/值对、列表和嵌套结构 —— 但其语法为方便人手写手读而调校。它成为配置文件的首选,正是因为一眼就能扫读。
name: RunWebTools active: true tags: - json - free address: city: London postcode: null
语法如何运作
三个概念涵盖了 YAML 的大部分:
- 缩进表示结构。 嵌套用空格表达,而非花括号。同一缩进层级的项目彼此是兄弟。
- 键/值对 用
key: value(冒号后的空格是必需的)。 - 列表 在每项前用一个
-。
那些陷阱
用空格,绝不用制表符
YAML 禁止用制表符缩进 —— 它会导致解析错误。请把编辑器设置为插入空格,因为二者在屏幕上看着一模一样,却只有一个有效。
“挪威问题”
YAML 会尝试猜测类型,这偶尔会适得其反。不加引号的 no、yes、on、off 会变成布尔值 —— 众所周知,挪威的国家代码 NO 会变成 false。当你指的是字面字符串时,请加引号:"NO"。
缩进错误悄无声息
因为空白带有含义,单独一行错位就能在没有任何错误的情况下改变结构 —— 文件只是被解析成了你并不想要的东西。把它交给一个会把解析结果重新输出的 YAML 校验器,是看清 YAML 究竟理解了什么的最快办法。
YAML vs. JSON
二者能表示相同的数据 —— 事实上,所有有效的 JSON 也都是有效的 YAML。取舍在于:
- 可读性: 对人而言 YAML 胜出 —— 没有花括号或引号,还支持注释(
#),而 JSON 不支持。 - 严格性: 对机器而言 JSON 胜出 —— 它刚性的语法几乎不给 YAML 所允许的类型猜测和缩进意外留下空间。
- 用途: 给人编辑的文件(配置)选 YAML,给程序交换的数据(API)选 JSON。
需要在两者之间转换?用 YAML 格式化器 和 JSON 格式化器 就能格式化并检查任一种。若你觉得 YAML 别扭,我们关于 JSON 及其常见错误 的指南是很好的搭配阅读。
更多 数据格式与编码
查看全部 数据格式与编码 指南 →本指南提到的工具