1. YAML的简介
YAML是用来专门写配置文件的语言,语言是比较简单的,远比JSON格式简便。
实质上是一种数据串行化格式,写入.yml
结尾的文件的数据会被转换为json格式的字符串。
2. YAML的约束
YAML配置文件需要遵守以下的规则:
基本语法:
- 大小写敏感
- 使用缩进来表示层级关系
- 缩进时不允许使用Tab键,只能使用空格
- 缩进的空格数目不重要,只要相同的层级左侧空格缩进相同就行
- #表示注释,当前行内的所有的内容都会被注释
3. YAML支持的数据结构
YAML支持的数据结构有三种:
- 对象:键值对的集合,也称为映射(Mapping)/哈希(hash)/字典(directory)
- 数组:一组按次序排列的值,又称为序列(Sequence)和列表(list)
- 纯量(scalars):单个的、不可再分的值
3.1 对象
// 写的语法最后都会转化为javaScript格式
animal: dog
// 显示出来的信息为: {animal:'dog'}
animal: {name: dog, age: 12}
// 显示出来的信息为: {hash: {name: 'dog', age: '12'}}
3.2 数组
// 数组格式的话,在需要构成数组的前面加一个-
animals:
- dog
- cat
- tiger
// 显示出来的信息为: { animals: [ 'cat', 'dog', 'tiger' ] }
-
- cat
- dog
- tiger
// 显示出来的信息为: [ [ 'cat', 'dog', 'tiger' ] ]
3.3 复合结构
animals:
dog
cat
tiger
dog:
skills: catch mouse
// 显示出来的信息为:{ animals: 'dog cat tiger', dog: { skills: 'catch mouse' } }
// 缩进表示是否是同级元素
3.4 纯量
纯量是最基本的值,不可再分割的值。
纯量分类:
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
int: 10
number: 29.9
double: 30.0
parent: ~
date: 2019-07-09
// 显示出来的信息
{ int: 10,
number: 29.9,
double: 30,
parent: null,
date: Tue Jul 09 2019 08:00:00 GMT+0800 (中国标准时间) }
// !!双感叹号表示强制转换
e: !!str 123
f: !!str true
// 显示出来的信息
e: '123', f: 'true'
3.5 字符串
字符串默认不用引号表示。
str: 这是字符串
// 显示出来的信息:{str: '这是字符串'}
// 如果字符串中包含空格或者特殊字符,需要放在引号之中
字符串可以使用单双引号来表示,但是需要注意,使用双引号的时候对于其中的特殊字符不会转义。
str: '字符串: \n字符串的内容'
// 结果: { str: '字符串: \\n字符串的内容' } 转义了
str: "字符串: \n字符串的内容"
// 结果: { str: '字符串: \n字符串的内容' } 未做转义操作
字符串中如果有除表示形式的单引号,需要使用''
两个单引号来完成转义
str: '字符串: lady''s'
// 结果: { str: '字符串: lady\'s' }
字符串可以写成多行,但是需要注意,第二行的数据前面必须添加一个空格,否则报错,而且换行符会被转换为空格显示出来
str: 有多个
字符串
组合
写法
// 结果: { str: '有多个 字符串 组合 写法' }
如果想保留换行符也是可以的,使用|
或者使用>
折叠换行符
str: |
字符串
组合
写法
// 结果: { str: '字符串\n组合\n写法\n' }
|+
表示保留末尾的换行符(所有的),|-
表示删除末尾的换行符,全部的
this: |+
包括末尾换行符,包括下一行的
str: |-
删除末尾换汉符,下一行的也删除
// 结果: { this: '包括末尾换行符,包括下一行的\n\n', str: '删除末尾换汉符,下一行的也删除' }
3.6 引用
锚点&
和别名*
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
&
建立锚点,<<
合并到当前数据,*
引用锚点
3.7 函数和正则表达式的转换
# example.yml
fn: function () { return 1 }
reg: /test/
// 结果: { fn: 'function () { return 1 }', reg: '/test/' }