🏠 首页 攻略 YAML是什么?配置文件的万能胶水语言

YAML是什么?配置文件的万能胶水语言

YAML(YAML Ain't Markup Language)是比JSON更人性化的配置文件格式。从Docker Compose到GitHub Actions,从Kubernetes到CI/CD流水线,YAML无处不在。本文用生活类比帮你彻底搞懂它的语法和用途。

YAML 到底是什么?用购物清单来理解

打开冰箱,你发现要做饭了。随手在便签上写:

购物清单
- 鸡蛋
- 牛奶
- 面包
  全麦的
- 蔬菜
  - 西红柿
  - 黄瓜

你家人看了也能懂。不用学新技能,不用记特殊符号,缩进+短横线就把层级关系说清楚了。

YAML 就是计算机世界的「购物清单」。它的名字是递归缩写:YAML Ain’t Markup Language(YAML不是标记语言),取首字母缩写回来叫 YAML,像个俄罗斯套娃。

YAML 的全称是 YAML Ain’t Markup Language,最早在2001年由一个程序员团队设计,目标是让人手写配置文件时不再痛苦。

YAML 有什么用?

YAML 的核心价值就一个:让配置文件更好读、更好写

看看它出场的场景:

  • Docker Compose — 用 YAML 定义多容器应用
  • Kubernetes — 用 YAML 声明你的服务架构
  • GitHub Actions — 用 YAML 编写自动化流水线
  • Ansible — 用 YAML 写运维剧本
  • Python 工具 — PyYAML 让你用 Python 读写 YAML

它和 JSON 都能表示结构化数据,但 YAML 不需要引号、花括号和方括号。人类写 YAML 的速度通常比 JSON 快三倍

YAML 的核心语法

基本类型

YAML 支持几种基础数据类型:

# 字符串
name: 张三
greeting: "Hello World"

# 数字
age: 28
price: 9.99

# 布尔值
isActive: true
isPaid: false

# 空值
nothing: null

# 日期时间
birthday: 2026-06-12

列表(用短横线)

fruits:
  - 苹果
  - 香蕉
  - 橙子

相当于 JSON 里的 ["苹果", "香蕉", "橙子"]

字典/对象(用冒号)

person:
  name: 张三
  age: 28
  city: 北京

这就是个嵌套的对象。

列表里面套对象

这是 YAML 最常用的写法之一:

employees:
  - name: 张三
    role: 工程师
  - name: 李四
    role: 设计师

多行文本(用管道符)

description: |
  这是一段多行文本。
  会自动保留换行。
  每一行都是内容的一部分。

注意缩进!

YAML 只用空格缩进,不用 Tab。这是新手最容易踩的坑。两层缩进通常用两个空格:

server:
  host: localhost
  port: 8080
  ssl:
    enabled: true
    cert: /path/to/cert.pem

YAML vs JSON:怎么选?

两者都能表示同样的数据结构,区别主要在风格:

场景推荐格式原因
配置文件YAML人类可读性好
API 数据交换JSON所有语言原生支持
需要复杂类型YAML支持锚点、合并键等特性
需要严格校验JSONSchema 工具链更成熟

简单说:人写的选 YAML,机器间传递的选 JSON

常见坑

  1. 缩进用 Tab — YAML 解析器会直接报错。永远用空格。
  2. 引号别乱加yes"yes" 在 YAML 里类型不同。不加引号的 yes 会被识别为布尔值 true
  3. 特殊字符:#[] 在值里面出现时要用引号包裹。比如 url: http://example.com 没问题,但 note: key: value 就需要写成 note: "key: value"
  4. 大数字被转科学计数1e9 会被当数字而不是字符串,写配置时注意。

总结

YAML 的设计哲学就一句话:让配置文件看起来像人说的话

它不追求性能,不追求功能全面,就追求一件事——你在终端里编辑 docker-compose.yml 时,不会对着满屏的花括号和引号怀疑人生。

下次你再看到 .yml.yaml 结尾的文件,别慌。把它当成一份带缩进的购物清单,一层一层往下看,基本都能读懂。

你平时在哪些场景见过 YAML?欢迎留言聊聊。