Skip to content

YAML 数据类型

对象

用键值对来表示对象。

  • key:value
key: value
1

对应的 JSON 格式为:

"key": "value"
1
  • 支持数据的多层嵌套
devDependencies:
  less: ^4.1.2
  less-loader: ^11.0.0
1
2
3

对应的 JSON 格式为:

"devDependencies": {
  "less": "^4.1.2",
  "less-loader": "^11.0.0",
}
1
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

数组

一组按次序排列的值。用破折号+空格开头的数据组成数组类型。

values:
  - value1
  - value2
  - value3
1
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

JSON:

"values": [ [ "value1", "value2"], ["value3", "value4"] ]
1

标量

单个不可再分的值,属于 YAML 中最基本的数据类型。

标量包括以下几种数据类型:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

布尔值

布尔值用 true 和 false 表示。

isNew: true
isOld: false
1
2

对应的 JSON:

"isNew": true
"isOld": false
1
2

INFO

在 YAML 中, true、True、TRUE、yes、Yes、YES 都表示真。 false、False、FALSE、no、No、NO 都表示假。

整数

支持二进制表示。

number1: 123
# 二进制表示
number3: 0001
1
2
3

浮点数

浮点数支持科学计数法。

number1: 12.3
# 科学计数法
number2: 6.8523015e+5 
1
2
3

nullNull~都可以表示空,不指定值默认也是空。

child1: null
child2: Null
child3: ~
# 依然表示空值
child4:
1
2
3
4
5

时间戳

YAML 支持 ISO8601 格式的时间数据。

date: 2022-6-1
iso8601: 2001-12-14t21:59:43.10-05:00 
1
2

对应的 Javascript:

{ 
  date: new Date('2022-6-1'),
  iso8601: new Date('2001-12-14t21:59:43.10-05:00')
}
1
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

WARNING

当字符串使用反斜杠\时,必须要包裹引号。

  • 多行字符

字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

str: 这是一段
  多行
  字符串
1
2
3
  • 保留换行

使用竖线符|来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留。

lines: |
  我是第一行
  我是第二行
    我是吴彦祖
      我是第四行
  我是第五行
1
2
3
4
5
6
  • 折叠换行

使用右尖括号>来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格。

lines: >
  我是第一行
  我也是第一行
  我仍是第一行
  我依旧是第一行

  我是第二行
  这么巧我也是第二行
1
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

等同于:

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

类型转换

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

对应的 JSON:

"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true"
"f": "yes"
1
2
3
4
5
6

参考链接

YAML 数据类型 has loaded