打开一个 docker-compose.yml 或 GitHub Actions 的工作流文件,满屏缩进加短横线,这就是 yaml。名字是个递归梗:yaml 不是标记语言,定位就是人好写、机器好读的配置格式。
语法核心就四条
- 缩进表示层级,习惯用两个空格,绝不能混入 Tab,混了直接解析报错
- 键值对写作 key: value,冒号后面必须跟一个空格
- 列表用短横线开头,一行一项
- 井号开头是注释,大多数字符串不用加引号
server: { port: 8080, debug: false }logs: [ app.log, error.log ]
三个出名的坑:一是数字自动转型,version: 1.0 可能被读成数字 1,敏感值套一层单引号,比如 version: '1.0';二是布尔歧义,单独的 no、yes、on、off 在很多解析器里会变成 false 和 true,经典的挪威问题,国家代码 NO 直接变 false;三是多文档用三个短横线分隔,锚点和引用能复用大段配置,Helm 模板里天天见。
哪里见得多?Kubernetes 的资源清单、Ansible 的剧本、CI 工作流、各种服务的 docker-compose,云原生一半的配置文件都是 yaml,学会读它等于拿到这些工具的入场券。
和 JSON 的关系一句话说清:yaml 是 JSON 的超集,JSON 能表达的它都能表达,但人写起来舒服得多。选型上不用纠结,容器编排、自动化运维这些生态已经把它定成标准,跟着用就行。真正要防的是缩进,一半以上的报错是空格没对齐。