YAML笔记

YAML笔记

YAML:YAML Ain’t a Markup Language

YAML:YAML不是一种标记语言

YAML官网:YAML

YAML发音是:/ˈjæməl/,类似于:鸭某。

如上所示,YAML是“YAML Ain’t a Markup Language”的递归缩写(YAML不是标记语言)。

YAML是专门用来写配置文件的语言。

在YAML语言开发的时候,实际上,YAML的意思是“Yet Another Markup Language”(仍然是另一种标记语言)。

YAML可以简单表示清单、散列表、标量等数据,使用空白来缩进和大量依赖外观的特色,适合用来表达或者编辑数据结构、配置文件、倾印调试内容、文件大纲等等。

YAML文件扩展名为.yml


语法规则

  • 大小写敏感
  • 使用缩进表示层级结构,且不能用tab只能用空格space,缩进的空格数量不重要,只要相同层级左对齐即可
  • #进行单行注释

数据类型

  1. 对象:键值对的集合,又称为映射、哈希、字典。

键值对写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 冒号后面有一个空格
key: value

# 值还可以是对象
key: {key1: value1, key2: value2, ...}

# 层级,下面用的不是tab,是4个空格
key:
key1: value1
key2: value2

# 较为复杂的对象格式,可以使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value
# 在复杂对象中的key和value都各为一个数组
?
- key1
- key2
:
- value1
- value2
  1. 数组:一组有次序的值,又称为序列、列表。

数组以-开头:

1
2
3
- elem1
- elem2
- elem3

多维数组:

1
key: [value1, value2, value3]

数组结构的子成员是一个数组:

1
2
3
4
-
- a
- b
- c

复杂数组实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
# microsoft是一个数组,每个元素又有三个属性
microsoft:
-
id: 001
name: wong
salary: 15w
-
id: 002
name: lee
salary: 20w

# 将以上复杂例子扁平化为flow式表示
microsoft: [{id: 001,name: wong,salary: 15w},{id: 002,name: lee,salary: 20w}]
  1. 数组和对象的复杂结构
1
2
3
4
5
6
7
8
9
10
11
12
# 数组
languages:
- Ruby
- Perl
- Python

# 对象
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org

对应的json:

1
2
3
4
5
6
7
8
9
{ 
languages: [ 'Ruby', 'Perl', 'Python'],
websites: {
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'use.perl.org'
}
}
  1. 纯量:原子值
  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string:
- 'Hello World' # 单引号、双引号均可,用来包裹含有特殊字符的字符串,单引号会转义,双引号不会转义
- HelloWorld # 字符串中不含有特殊字符
- line1
line2 # 多行字符串,从第二行开始要缩进一格,一个换行被转化为一个空格
boolean:
- true # true,True,TRUE三种均可
- false # false,False,FALSE三种均可
int:
- 4869 # 十进制表示
- 0b1001_1001_1110_1011 # 二进制表示
float:
- 3.1415
- 1.23e+2 # 科学计数法
null:
name: 'node'
parent: ~ # ~表示null,注意是null不是Null
datetime:
- 2020-5-12T14:55:02+08:00 # ISO8601格式,时间和日期用T连接,最后+时区
date:
- 2020-5-12 # ISO8601格式
  1. 引用

锚点:&用来建立锚点。

别名:*用来引用锚点。

合并:<<用来合并引用的锚点数据到当前数据。

实例1:

1
2
3
4
5
6
classA: &classA
student1: wong
student2: lee
classB:
student3: queen
<<: *classA

以上代码相当于:

1
2
3
4
5
6
7
classA:
student1: wong
student2: lee
classB:
student3: queen
student1: wong
student2: lee

实例2:

1
2
3
4
5
names:
- &bruce bruce
- lee
- wong
- *bruce

以上代码相当于:

1
2
3
4
5
names:
- bruce
- lee
- wong
- bruce

参考

阮一峰YAML语言教程

评论