YAML 介绍

什么是 YAML?

了解人类友好的数据序列化标准。学习它的语法、用法,以及为什么它成为了配置文件的首选格式。

定义

YAML (YAML Ain't Markup Language) 是一种人类可读的数据序列化语言。它常用于配置文件和数据存储或传输的应用中。YAML 的设计目标是易于人类阅读和编写,同时也易于机器解析和生成。

YAML 有什么用处?

YAML 广泛应用于各种场景,特别是在需要人类可读配置的地方。

配置文件

Docker Compose、Kubernetes、Ansible 等工具的首选配置格式。

CI/CD 管道

GitHub Actions、GitLab CI、CircleCI 等使用 YAML 定义工作流。

数据序列化

在应用程序之间传输复杂的数据结构,支持引用和锚点。

核心特性

为什么 YAML 成为配置文件的首选格式?

人类可读

使用缩进和简洁的语法,比 JSON 和 XML 更易于阅读和编写。

支持注释

可以添加注释来解释配置,这是 JSON 所不具备的功能。

数据类型丰富

支持字符串、数字、布尔值、数组、对象、日期等多种数据类型。

支持引用

通过锚点(&)和别名(*)实现数据重用,避免重复。

YAML 语法规则

YAML 使用缩进来表示层级关系,支持键值对、列表和多行字符串等结构。

1

使用缩进表示层级

使用空格(不是 Tab)进行缩进,通常是 2 个空格。缩进表示数据的嵌套关系。

2

键值对用冒号分隔

键和值之间使用冒号和空格分隔(key: value)。

3

列表使用短横线

列表项使用短横线(-)开头,后跟空格。

4

支持多行字符串

使用

# YAML Example
name: John Doe
age: 30
active: true
skills:
  - JavaScript
  - Python
  - YAML
address:
  city: New York
  country: USA
bio: |
  Multi-line string
  with preserved newlines

YAML vs JSON

对比这两种流行的数据格式。

特性YAMLJSON
可读性极易读(简洁语法)较易读(有括号)
注释支持支持(# 注释)不支持
语法复杂度较复杂(缩进敏感)简单(明确的括号)
数据类型丰富(日期、引用等)基础(6 种类型)
文件大小较小(无冗余符号)较大(括号和引号)

使用建议

如何高效使用 YAML 并避免常见误区。

使用空格而非 Tab

YAML 规范要求使用空格进行缩进,不要使用 Tab 键,推荐使用 2 个空格。

谨慎使用引号

大多数情况下字符串不需要引号,但包含特殊字符时需要使用单引号或双引号。

善用锚点和别名

使用 & 定义锚点,使用 * 引用别名,避免重复配置。

添加版本声明

在文件开头使用 %YAML 1.2 声明 YAML 版本,确保解析器兼容性。

常见问题

YAML 和 JSON 哪个更好?

这取决于使用场景。YAML 更适合配置文件,因为它支持注释且更易读。JSON 更适合 API 数据传输,因为它解析速度更快且语法更简单。

YAML 的缩进必须是 2 个空格吗?

不是。YAML 允许使用任意数量的空格进行缩进,但同一层级必须保持一致。2 个空格是最常见的约定。

YAML 安全吗?

YAML 解析器可能存在安全风险,特别是在处理不受信任的输入时。建议使用安全模式解析器,避免执行任意代码。