RUNWEBTOOLS
简体中文
数据格式与编码

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 会尝试猜测类型,这偶尔会适得其反。不加引号的 noyesonoff 会变成布尔值 —— 众所周知,挪威的国家代码 NO 会变成 false。当你指的是字面字符串时,请加引号:"NO"

缩进错误悄无声息

因为空白带有含义,单独一行错位就能在没有任何错误的情况下改变结构 —— 文件只是被解析成了你并不想要的东西。把它交给一个会把解析结果重新输出的 YAML 校验器,是看清 YAML 究竟理解了什么的最快办法。

YAML vs. JSON

二者能表示相同的数据 —— 事实上,所有有效的 JSON 也都是有效的 YAML。取舍在于:

  • 可读性: 对人而言 YAML 胜出 —— 没有花括号或引号,还支持注释(#),而 JSON 不支持。
  • 严格性: 对机器而言 JSON 胜出 —— 它刚性的语法几乎不给 YAML 所允许的类型猜测和缩进意外留下空间。
  • 用途: 给人编辑的文件(配置)选 YAML,给程序交换的数据(API)选 JSON。

需要在两者之间转换?用 YAML 格式化器JSON 格式化器 就能格式化并检查任一种。若你觉得 YAML 别扭,我们关于 JSON 及其常见错误 的指南是很好的搭配阅读。

更多 数据格式与编码

查看全部 数据格式与编码 指南 →

本指南提到的工具