YAML 教程

lyjin 2025-02-08

1. YAML 简介

YAML(YAML Ain’t Markup Language)是一种简洁易读的数据序列化格式,广泛用于配置文件、数据存储等场景。它支持键值对、列表、嵌套结构,易于阅读和编辑。

2. YAML 语法基础

2.1 键值对

YAML 采用 key: value 形式表示键值对,冒号后需要有一个空格。

  1. name: John Doe
  2. age: 30
  3. location: Earth

2.2 缩进

YAML 使用缩进表示层级关系,通常使用两个空格,不允许使用 Tab。

  1. person:
  2. name: Alice
  3. age: 25
  4. address:
  5. city: New York
  6. zip: 10001

2.3 列表

使用 - 表示列表项,列表项之间需要相同缩进。

  1. languages:
  2. - Python
  3. - JavaScript
  4. - Go

也可以使用 [] 表示列表:

  1. languages: [Python, JavaScript, Go]

2.4 多行字符串

使用 | 表示保留换行符的字符串,> 表示折叠换行符。

  1. description: |
  2. 这是一个多行字符串。
  3. 每行都会被保留。
  4. summary: >
  5. 这也是一个多行字符串。
  6. 但换行符会被折叠。

2.4.1 去掉多行字符串的最后一行换行

如果想去掉最后的换行符,可以使用 |-(保留换行但去掉末尾换行)或 >-(折叠换行并去掉末尾换行)。

  1. text1: |-
  2. 第一行
  3. 第二行
  4. 第三行

输出:

  1. 第一行
  2. 第二行
  3. 第三行
  1. text2: >-
  2. 第一行
  3. 第二行
  4. 第三行

输出:

  1. 第一行 第二行 第三行

2.5 注释

使用 # 表示注释。

  1. # 这是一个 YAML 文件
  2. name: John Doe # 用户名

3. 复杂数据结构

3.1 字典(对象)

字典可以嵌套定义:

  1. person:
  2. name: Alice
  3. age: 25
  4. contact:
  5. email: alice@example.com
  6. phone: 123-456-7890

也可以使用 {} 语法:

  1. person: {name: Alice, age: 25}

3.2 复杂列表

列表中可以包含字典:

  1. employees:
  2. - name: Alice
  3. age: 25
  4. - name: Bob
  5. age: 30

4. YAML 高级特性

4.1 变量引用(锚点 & 别名 *)

YAML 允许使用 & 定义锚点,* 进行引用,避免重复数据。

  1. defaults: &defaults
  2. role: user
  3. active: true
  4. user1:
  5. name: Alice
  6. <<: *defaults
  7. user2:
  8. name: Bob
  9. <<: *defaults

4.2 环境变量

某些 YAML 解析器支持环境变量:

  1. database:
  2. host: ${DB_HOST}
  3. port: ${DB_PORT}

4.3 多文档分隔符

使用 --- 分隔多个 YAML 文档。

  1. ---
  2. name: Alice
  3. age: 25
  4. ---
  5. name: Bob
  6. age: 30

5. YAML 使用场景

  • 配置管理(Kubernetes, Docker Compose, Ansible)
  • 数据存储(如 API 响应、日志格式化)
  • 对象序列化(如 Python 的 PyYAML 库)

6. YAML 与 JSON 互换

YAML 是 JSON 的超集,可以相互转换。

  1. person:
  2. name: Alice
  3. age: 25

等同于 JSON:

  1. {
  2. "person": {
  3. "name": "Alice",
  4. "age": 25
  5. }
  6. }

7. YAML 解析工具

7.1 Python 解析 YAML

使用 PyYAML 库解析 YAML:

  1. import yaml
  2. with open("config.yaml", "r") as file:
  3. data = yaml.safe_load(file)
  4. print(data)

7.2 命令行解析 YAML

使用 yq 解析 YAML(类似 jq 解析 JSON):

  1. yq eval '.person.name' config.yaml

8. 总结

YAML 是一种简洁、可读性强的数据格式,广泛应用于配置管理和数据存储。掌握 YAML 的基本语法、数据结构和解析工具,可以更高效地使用它。

没有评论
请登陆后评论
新建评论
移除
关闭
提交