什么是 YAML?
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化语言,常用于配置文件和数据交换。它使用缩进来表示结构,使其比 JSON 或 XML 更易于阅读复杂的嵌套数据。
快速了解
| 全称 | YAML Ain't Markup Language |
|---|---|
| 创建时间 | 2001 年由 Clark Evans、Ingy döt Net、Oren Ben-Kiki 创建 |
| 规范文档 | 官方规范 |
工作原理
YAML 使用空白缩进来表示结构,无需括号或标签。它支持多种数据类型,包括字符串、数字、布尔值、null、数组(序列)和对象(映射)。YAML 允许注释(以 # 开头)、多行字符串以及用于重用内容的锚点和别名。它是 JSON 的超集,这意味着有效的 JSON 也是有效的 YAML。YAML 广泛用于 DevOps 工具,如 Docker Compose、Kubernetes、Ansible 和 CI/CD 管道。
主要特点
- 使用缩进表示结构(只能用空格,不能用制表符)
- 支持 # 符号注释
- 使用 | 和 > 操作符支持多行字符串
- 锚点(&)和别名(*)用于内容重用
- 是 JSON 的超集 - 所有 JSON 都是有效的 YAML
- 用 --- 分隔的多文档支持
常见用途
- 配置文件(Docker Compose、Kubernetes)
- CI/CD 管道定义(GitHub Actions、GitLab CI)
- 基础设施即代码(Ansible、CloudFormation)
- API 规范(OpenAPI/Swagger)
- 静态网站生成器(Jekyll、Hugo)
示例
Loading code...常见问题
YAML 和 JSON 有什么区别?应该选择哪个?
YAML 使用缩进表示结构,支持注释,可读性更好,适合配置文件。JSON 语法更严格,解析更快,是数据交换的标准格式。选择建议:配置文件(如 Docker、Kubernetes)用 YAML;API 数据传输用 JSON。YAML 是 JSON 的超集,所有 JSON 都是有效的 YAML。
YAML 中为什么不能使用 Tab 缩进?
YAML 规范明确禁止使用 Tab 字符进行缩进,只允许使用空格。这是因为不同编辑器对 Tab 的显示宽度不同,可能导致解析错误或意外的层级关系。建议在编辑器中设置将 Tab 自动转换为空格(通常是 2 个空格)。
YAML 中如何表示多行字符串?
YAML 提供两种多行字符串语法:1)管道符 | 保留换行符,文本按原样保留;2)大于号 > 将换行符折叠为空格,适合长段落。还可以添加 - 或 + 控制末尾换行符的处理。例如 |+ 保留所有末尾换行,|- 删除末尾换行。
YAML 中的锚点和别名是什么?
锚点(&)和别名(*)用于避免重复内容。使用 &name 定义锚点,使用 *name 引用它。例如定义 defaults: &defaults 后,可以用 <<: *defaults 合并到其他映射中。这在配置文件中特别有用,可以定义共享配置并在多处复用。
如何避免 YAML 的常见陷阱?
常见陷阱包括:1)布尔值陷阱:yes/no/on/off 会被解析为布尔值,需要加引号;2)数字陷阱:以 0 开头的数字可能被解析为八进制;3)冒号陷阱:值中包含冒号需要加引号;4)特殊字符:包含 #、:、- 等字符的字符串应加引号。