YAML语法
什么是YAML?
YAML是一个可读性高,用来表达数据序列化的格式,YAML的意思是:“Yet Another Markup Language”(仍是一种标记语言),YAML 的配置文件后缀为.yml
YAML语法
语法特性:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
YAML数据结构:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
- 纯量(scalars):单个的、不可再分的值
YAML对象
对象键值对使用冒号结构表示"key: value",冒号后面要加一个空格
简单的对象(如下)
key:
key1: value1
key2: value2
也可以是下面这种格式
key: {key1: value1, key2: value2}
复杂的对象
对象的属性是一个数组[key1,key2],对应的值也是一个数组[value1,value2]
可以用?和:来表示(如下)
?
- key1
- key2
:
- value1
- value2
YAML数组
以"-"开头的行表示构成一个数组
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
每个数组有单个元素(如下)
array:
- one
- two
也可以是下面这种格式
array: [one, two]
每个数组有多个元素组成(如下)
array:
- id: 1
name: company1
size: 200M
- id: 2
name: company2
size: 500M
也可以是下面这种格式
array: [{id: 1,name: company1,size: 200M},{id: 2,name: company2,size: 500M}]
意思是array属性是一个数组,每一个数组元素又是由 id、name、size三个属性构成
复合结构
数组和对象构成的复合结构(如下)
city:
- chengdu
- beijing
- shanghai
location:
chengdu: southwest
beijing: north
shanghai: east
json格式为(如下)
{
city: [ 'chengdu', 'beijing', 'shanghai'],
location: {
chengdu: 'southwest',
beijing: 'north',
shanghai: 'east'
}
}
纯量
纯量是最基本的,不可再分的值
其中包括:
1.字符串、布尔值、整数、浮点数、Null
2.时间、日期
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2
#字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17
#日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00
#时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
引用
可以用&锚点和*别名来引用:
比如:
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点
相当于(如下)
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
再比如:
- &number four
- one
- two
- three
- *number
也就是如下内容
[ 'four', 'one', 'two', 'three', 'four' ]