什么是 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
  • 用 --- 分隔的多文档支持

常见用途

  1. 配置文件(Docker Compose、Kubernetes)
  2. CI/CD 管道定义(GitHub Actions、GitLab CI)
  3. 基础设施即代码(Ansible、CloudFormation)
  4. API 规范(OpenAPI/Swagger)
  5. 静态网站生成器(Jekyll、Hugo)

示例

loading...
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)特殊字符:包含 #、:、- 等字符的字符串应加引号。

相关工具

相关术语

相关文章