YAML

简洁实用的标记语言

阮一峰博客

语言结构

  • 严格区分大小写
  • 缩进区分作用域
  • 可以通过锚点和引用来当做变量
  • 数据结构简单

目前有很多的配置文件采取这种格式

数据机构分类:

对象:
这里的对象和json中的差不多的意思, 就是键值对

1
2
3
4
5
6
7
8
obj1: obj
obj2:
key1: v1
key2: v2
obj3: obj2

# 单行表示:
obj2: {name: 'asfasf', foo: bar}

数组:
通过-来标记数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- a1
- a2
- a3

# 单行
[a1, a2, a3]

# 二维数组
-
- a1
- a2
- a3

# 单行
[[a1, a2, a3]]
{array: [a1, a2, a4]}

纯量

不能在分割的量, 如数字, 字符串.etc

1
2
3
4
5
6
a: 'asfaf'
b: 12
c: true
date: 1987-01-01
# 空
null: ~

使用两个感叹号!!作为强制转换类型


字符串
涉及字符串中的转义的变换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 可以直接写, 对于没有什么特殊要求的字符串
str: 啊开始发货刷卡机发空间发货
# 有空格或者其他关键字字符, 用单引号
str: '按时间发哈空间 爱上了金凤花开'
# 双引号不会对字符串中的转义内容进行转义
str: '比如回车换行\n ' # 这里转义
str2: "比如回车换行\n " # 这里不会转义

# 字符串内需要转移的地方用`'`一个单引号来转义
str: 'It''s me' # It's me

# 多行字符串, 缩进一个单空格, 换行会转化为空格
str: 啊是否
啊是否
啊是否

# 保留换行 使用`|`保留每个换行
str: |
aslkjfhl
asfhlakjsf

# 只保留最后的的换行使用`>`
str: >
啊是否卡死了发
叫撒回复了卡

# 再加个+来表示保留这个文字块末尾的换行
str: |+
asklfjlka
aflk

# 加个`-`表示删除文字块末尾的换行
str: |-
aksjflk
asfnlkj

使用锚点&可以将当行当做一个变量使用, 即在其他地方引用到这个变量名的, 会调用这行的定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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

还有这样的, &变量名, *引用,

1
2
3
4
5
- &showell Steve
- Clark
- Brian
- Oren
- *showell

使用js-yaml库可以将yaml和js相转换