YAML(YAML Ain't Markup Language)是一种便于人类阅读的数据序列化标准,常用于配置文件、数据交换等场景。它以其简洁和易于理解的语法而受到开发者的青睐。YAML 设计的目标是易于人类阅读和支持各种编程语言的数据结构。
一、YAML 基础
1. 数据结构
YAML 主要支持三种数据结构:
- 标量(Scalars):单个的、不可分的值,比如字符串或数字。
- 序列(Sequences):一组按顺序排列的值,通常表示为列表或数组。
- 映射(Mappings):键值对的集合,通常表示为哈希表、字典或对象。
2. 语法
- 缩进:YAML 使用缩进来表示结构层次,类似于 Python。缩进空格的数量不是固定的,但是必须一致。
- 列表 :使用短横线
-
开头表示一个列表项。 - 字典 :使用冒号
:
后跟一个空格来分隔键和值。 - 多行字符串 :可以用
|
或>
来表示,|
保留换行符,>
折叠换行符。 - 注释 :使用
#
开头的行被视为注释。
3. 示例
# 示例 YAML 配置文件
person:
name: John Doe
age: 30
children:
- Alice
- Bob
address:
street: 123 Elm Street
city: Somewhere
zip: 12345
# 列表示例
fruits:
- Apple
- Banana
- Cherry
# 多行字符串示例
description: |
This is a long description
that spans multiple lines in the YAML file.
It includes all line breaks.
二、YAML 的高级特性
1. 锚点和别名
YAML 允许定义一个锚点(使用 &
)并在后续使用别名(使用 *
)引用,这在配置文件中避免重复非常有用。
defaults: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults
database: dev_db
test:
<<: *defaults
database: test_db
2. 合并键
使用 <<
符号可以合并两个字典的内容,这在使用共通配置时非常方便。
base: &base
name: Everyone has same name
foo:
<<: *base
age: 10
bar:
<<: *base
age: 20
3. 复杂的数据类型
YAML 支持表示更复杂的数据类型,如日期、时间、布尔值和 null 值。
三、YAML 使用注意事项
- 缩进问题:缩进必须使用空格而非制表符(tab),不同编辑器中的默认设置可能不同。
- 数据类型转换:YAML 自动将数据转换为相应的数据类型,比如将 "123" 解析为整数而非字符串,有时这可能不是预期的行为。
四、使用场景
YAML 常用于各种软件和应用的配置,如 Kubernetes 的配置文件、CI/CD 系统(如 Travis CI、GitLab CI、Jenkins)的配置文件等。它的易读性和简洁性使其成为理想的配置语言。
通过以上详细介绍,可以看出 YAML 是一种灵活且功能丰富的数据序列化语言,非常适合用于现代软件开发和运维任务中的配置管理。