YAML 首次发表于 2001 年,虽然不如 JSON、XML 之类的语言流行,应用也没有那么广泛,但是 YAML 也有它的优势;
yaml 语法和其他高级语法类似,可以简单表达清单、散列表,标量等数据形态;
特色:它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML非常接近);
yaml大多应用于编辑配置文件,配置的文件后缀为.yml;
1 基本语法
1 大小写敏感;
2 用缩进表达层级关系:缩进不允许使用tab,只允许空格;缩进的空格数不重要,只要相同层级的元素左对齐即可;
3 “#”表示注释,只能单行注释;
# YAML
one:
two: 2
three:
four: 4
five: 5
// 以上的内容转成 JSON 后
"one": {
"two": 2,
"three": {
"four": 4,
"five": 5
}
}
4 一个文件可以表示多个文件内容:
用“ --- ”即三个破折号表示一份内容的开始;
用“ ... ”即三个小数点表示一份内容的结束(非必需)
2 数据类型
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
(key: value)形式出现的数据
# YAML
key: value
// JSON
"key": "value"
- 支持多层嵌套
key:
child-key: value
child-key2: value2
- 支持流式风格( Flow style)的语法(用花括号包裹,用逗号加空格分隔,类似 JSON)
# YAML
key: { child-key1: value1, child-key2: value2 }
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list),一组以区块格式(Block Format)(即“破折号+空格”)开头的数据组成一个数组
# YAML
values:
- value1
- value2
- value3
// JSON
"values": [ "value1", "value2", "value3" ]
- 支持多维数组(用缩进表示层级关系)
# YAML
values:
-
- value1
- value2
-
- value3
- value4
// JSON
"values": [ [ "value1", "value2"], ["value3", "value4"] ]
- 纯量(scalars):单个的、不可再分的值
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
3 相对复杂的数据类型举例:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
companies 属性是一个数组,每一个数组元素又是由 id、name、price 三个属性构成;
数组也可以使用流式(flow)的方式表示:
companies: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
4 符合结构
数组和对象可以构成复合结构,例:
languages:
- Ruby
- Perl
- Python
websites:
YAML:
Ruby:
Python:
Perl:
转换为 json 为:
{
languages: [ 'Ruby', 'Perl', 'Python'],
websites: {
YAML: '',
Ruby: '',
Python: '',
Perl: ''
}
}
5 引用
& 锚点和 * 别名,可以用来引用
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
相当于:
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
参考:YAML 入门教程 |
一文看懂 YAML - 知乎