外观风格
YAML 数据类型
对象
用键值对来表示对象。
- key:value
key: value
1
对应的 JSON 格式为:
"key": "value"
1
- 支持数据的多层嵌套
devDependencies:
less: ^4.1.2
less-loader: ^11.0.0
1
2
3
2
3
对应的 JSON 格式为:
"devDependencies": {
"less": "^4.1.2",
"less-loader": "^11.0.0",
}
1
2
3
4
2
3
4
- 流式风格语法
是指用花括号包裹,逗号加空格分隔的写法,和 JSON 类似。
key: { child1: value1, child2: value2 }
1
JSON:
"key": { "child1": "value1", "child2": "value2" }
1
- 复杂对象
用 问号 ?
声明一个复杂对象,允许使用多个词汇(数组)来组成键。
?
- name1
- name2
:
- value1
- value2
1
2
3
4
5
6
2
3
4
5
6
数组
一组按次序排列的值。用破折号+空格
开头的数据组成数组类型。
values:
- value1
- value2
- value3
1
2
3
4
2
3
4
JSON:
"values": [ "value1", "value2", "value3" ]
1
同时支持行内表示法来表达(用方括号包裹,逗号加空格分隔,类似 JSON)。
values: [value1, value2, value3]
1
JSON:
"values": [ "value1", "value2", "value3" ]
1
支持多维数组,用缩进表示层级关系。
values:
-
- value1
- value2
-
- value3
- value4
1
2
3
4
5
6
7
2
3
4
5
6
7
JSON:
"values": [ [ "value1", "value2"], ["value3", "value4"] ]
1
标量
单个不可再分的值,属于 YAML 中最基本的数据类型。
标量包括以下几种数据类型:
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
布尔值
布尔值用 true 和 false 表示。
isNew: true
isOld: false
1
2
2
对应的 JSON:
"isNew": true
"isOld": false
1
2
2
INFO
在 YAML 中, true、True、TRUE、yes、Yes、YES 都表示真。 false、False、FALSE、no、No、NO 都表示假。
整数
支持二进制表示。
number1: 123
# 二进制表示
number3: 0001
1
2
3
2
3
浮点数
浮点数支持科学计数法。
number1: 12.3
# 科学计数法
number2: 6.8523015e+5
1
2
3
2
3
空
null
、Null
和~
都可以表示空,不指定值默认也是空。
child1: null
child2: Null
child3: ~
# 依然表示空值
child4:
1
2
3
4
5
2
3
4
5
时间戳
YAML 支持 ISO8601 格式的时间数据。
date: 2022-6-1
iso8601: 2001-12-14t21:59:43.10-05:00
1
2
2
对应的 Javascript:
{
date: new Date('2022-6-1'),
iso8601: new Date('2001-12-14t21:59:43.10-05:00')
}
1
2
3
4
2
3
4
字符串
字符串是 YAML 最常见,也是最复杂的一种数据类型。
- 字符串默认不使用引号包裹。
description: 这是一行字符串
description2: "I am fine. \u263A" # 使用双引号包裹时支持 Unicode 编码
description3: "\x0d\x0a is \r\n" # 使用双引号包裹时还支持 Hex 编码
description4: '一行字符串' # 可以是单引号包裹
description5: '内容: 字符串' # 特殊字符需要包裹引号
str: 'labor''s day' # 单引号之中如果还有单引号,必须连续使用两个单引号转义。
1
2
3
4
5
6
2
3
4
5
6
WARNING
当字符串使用反斜杠\
时,必须要包裹引号。
- 多行字符
字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
str: 这是一段
多行
字符串
1
2
3
2
3
- 保留换行
使用竖线符|
来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留。
lines: |
我是第一行
我是第二行
我是吴彦祖
我是第四行
我是第五行
1
2
3
4
5
6
2
3
4
5
6
- 折叠换行
使用右尖括号>
来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格。
lines: >
我是第一行
我也是第一行
我仍是第一行
我依旧是第一行
我是第二行
这么巧我也是第二行
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
引用
为了避免重复的定义,YAML 提供了由锚点标签&
和引用标签*
组成的语法,利用这套语法可以快速引用相同的一些数据。
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
等同于:
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
类型转换
YAML 支持使用严格类型标签:!!
(双感叹号+目标类型)来强制转换类型。
a: !!float '666' # !! 为严格类型标签,字符串转为浮点数
b: '666' # 其实双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串
1
2
3
4
5
6
2
3
4
5
6
对应的 JSON:
"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true"
"f": "yes"
1
2
3
4
5
6
2
3
4
5
6