YAML (YAML Ain’t Markup Language) 是一种人类可读的数据序列化格式,以下是 YAML 中常见格式及其含义的详细说明:
1. 键值对 (Key-Value Pairs)
最基本的元素,表示一个属性和它的值
name: John Doe # 字符串值
age: 30 # 数字值
is_active: true # 布尔值
2. 列表/数组 (Lists/Arrays)
用短横线 -
表示列表项
fruits:
- Apple
- Banana
- Orange
3. 嵌套结构
通过缩进表示层级关系
person:
name: Alice
address:
street: 123 Main St
city: Anytown
zip: 12345
4. 多行字符串
有三种表示方式:
保留换行符 (|
)
description: |
This is a multi-line
string that preserves
line breaks.
折叠换行符 (>
)
description: >
This is a multi-line
string where line breaks
are converted to spaces.
纯量块 (无符号)
description: This is a \
single line string with \
escaped line breaks.
5. 锚点与引用 (&
和 *
)
用于避免重复定义
defaults: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults # 合并defaults内容
database: dev_db
6. 数据类型表示
字符串 (默认不需要引号)
name: John
quoted: "需要引号的字符串" # 包含特殊字符时需要
数字
integer: 123
float: 3.14
scientific: 1.23e+4
布尔值
true_value: true # 或 True, TRUE
false_value: false # 或 False, FALSE
null 值
null_value: null # 或 Null, NULL, ~
时间戳
datetime: 2025-05-30T10:55:20Z
date: 2025-05-30
7. 特殊格式
流式集合 (Flow Style)
用 {}
和 []
表示紧凑格式
person: {name: John, age: 30}
colors: [red, green, blue]
标签 (Tags)
显式指定数据类型
not-date: !!str 2025-05-30
binary-data: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
+f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLCAgjoEwn
uNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
8. 文档分隔符
用于分隔多个YAML文档
---
# 文档1
name: Doc1
...
---
# 文档2
name: Doc2
重要注意事项
- 缩进:必须使用空格(通常2个),不能使用Tab
- 大小写敏感:
key
和Key
是不同的 - 特殊字符:包含
:
,{
,}
,[
,]
,,
,&
,*
等字符的字符串需要引号 - 注释:以
#
开头,到行尾结束
YAML vs JSON 对应关系
YAML 格式 | JSON 等效 |
---|---|
key: value | {"key": "value"} |
- item1 | ["item1"] |
parent: {child: value} | {"parent": {"child": "value"}} |
YAML 的这些格式特性使其非常适合用于配置文件(如Kubernetes、Docker Compose等),比JSON更易读和编写。