YAML学习笔记
YAML
简介
YAML是一种数据序列化语言,包含具有重要构造的标记语言,以区分面向数据的语言和文档标记。
创建YAML文件的规则
在创建yaml文件时,有以下规则:
1、YAML区分大小写;
2、使用.yaml或.yml作为扩展名;
3、yaml在创建yaml文件时不允许使用制表符,只允许使用空格;
4、使用缩进代表层级关系;
5、使用“#”注释,仅支持单行注释
基本组件
常规块格式
使用连字符(“-”)+空格开始指定列表中的新项目;
例:--- # Favorite
- Fly House
- zyxywy
內联格式
用逗号和空格分隔,每个项目用JSON括起来;
例:--- # list
[Fly House,zyxywy]
折叠文本
将换行符转换为空格并删除前导空格;
例:- {name: zyxy wy, age: 33}
- name: aaron Yin
age: 27
#前导空格 就是在字符串最开始部分的空格 从字符串开头,到第一个不是空格的元素,中间所有的空格是前导空格
#尾随空格, 就是结尾最后一个非空格元素,到结尾,中间所有的空格。
基本要素简介:
1、注释以#开头
2、通过空格将注释和其他标记分开
3、空白的缩进用于表示结构
4、标签不包含在yaml文件的缩进中
5、列表成员用前导连字符(-)表示
6、列表成员用方括号括起来,并以逗号分隔
7、关联数组使用冒号(:)以键值对的格式表示,用大括号括起来
8、具有单个流的多个文档用(---)分隔
9、每个文件中的重复节点最初用"&"表示,后面用星号“*”标记
10、节点标有感叹号(!)或双重感叹号(!!),后面跟字符串,可以扩展URI或URL
11、列表分隔符冒号或逗号后面带有空格
数据类型
对象:键值对的集合,又称映射mapping、哈希hashes、字典dictionary
数组:一组按次序排列的值,又称序列sequence、列表list
纯量(scalars):单个的、不可再分的值
对象:
结构:[key: value] #冒号后有个空格
key:{key1: value1,key2: value2,...}
缩进表示层级关系:
key:
child-key: value
child-key2: value2
复杂的对象格式:问号?加空格代表一个复杂的key,冒号:加空格表示一个value
?
- key1
- key2
:
- value1
- value2
#表示一个对象,属性是数组[key1,key2],值是[value1,value2]
数组:
以连字符(-)开头的行表示构成一个数组:
例:- abc
- efg
- hij
支持多维数组,可以使用行内表示:
格式:key: [value1, value2, ...]
缩进格式:
-
- abc
- efg
- hij
例:
companies:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500w
#流式(flow)表示:companies: [{id: 1,name: company1,price: 200w},{id: 2,name: company2,price: 500w}]
复合结构:
数组和对象可以构成复合结构:
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: usr.perl.org
#JSON格式:
{
languages: ['Ruby', 'Perl', 'Python'],
websites: {
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org',
Perl: 'usrl.perl.org'
}
}
纯量:
最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点数、Null、时间、日期
例:
boolean:
- TRUE #true,True表示也可以
- FALSE #false,False
float:
- 8.26
- 6.246236e+5
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制
null:
nodeNmae: 'node'
parent: ~ #"~"表示null
string:
- 'hello yaml' #双引号或单引号包含特殊字符
- newline #字符串可以拆成多行,每一行的换行符和前导空格会被转化成一个空格
newline2
- 钟声
date:
- 2019-12-17 #日志格式必须为yyyy-MM-dd
datetime:
- 2019-12-17T15:30:30+08:00 #日期和时间使用T连接,使用“+”代表时区
引用:
&锚点和< span class="marked">*别名,可以用来引用:
例1:
example: &example #“&” 用来建立锚点,“<<”表示合并到当前数据,“*” 用来引用锚点
adapter: postgres
host: localhost
test:
database: myapp_test
<<: *example
相当于
example: &example
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
例2:
- &example2 steve
- aaron
- *example2
相当于
['steve', 'aaron', 'steve']