目录
1.基本语法
2.数据类型
3.YAML 对象
4.YAML 数组
5.YAML 复合结构
6.YAML 纯量
7. 引用
1.基本语法
1)大小写敏感
2)缩进表示层级关系
3)缩进只允许空格,不能使用tab
4)缩进空格数没有要求,相同层级元素左对齐即可
5)# 注释
6)配置文件后缀为 .yml
2.数据类型
1)对象:键值对集合,又称映射、哈希、字典
2)数组:一组按次序排列的值,又称序列、列表
3)纯量:scalars,单个的、不可再分的值
3.YAML 对象
1)键值对结构 key: value,冒号:后加一个空格
2)key:{key1: value1, key2: value2, ...}
3)缩进格式 层级关系
key:
key1: value1
key2: value2
4)复杂对象格式
?
- complexkey1
- complexkey2
:
- complexvalue1
- complexvalue2
使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value;
即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]
4.YAML 数组
1)以 - 开头的行表示构成一个数组:
- A
- B
- C
- D
# 相当于:['A','B','C','D']
2)支持多维数组,可以使用行内表示:
key: [value1, value2, ...]
转化为python:
{data: [red,blue, ...]}
# 转为python {data: ['red','blue', ...]}
3)数据结构的子成员是一个数组,可以在该项下面缩进一个空格:
-
- A
- B
- C
# 相当于[['A','B','C']]
datas:
-
id: 1
name: company1
price: 200W
-
id: 2
name: company2
price: 500W
# 相当于 datas: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]
5.YAML 复合结构
对象+数组:
languages:
- Ruby
- YAML
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
YAML转换为JSON:
{
languages: ['Ruby', 'YAML', 'Python'],
websites: {
YAML: 'yaml.org',
Ruby: 'ruby-lang.org',
Python: 'python.org'
}
}
6.YAML 纯量
1)纯量是最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点、NULL、时间、日期
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' # 可以使用双引号或者单引号包裹特殊字符
- "Hello world"
- newline
newline2 # 字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2022-12-08 # 日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2022-12-08T15:02:31+08:00 # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
7. YAML 字符串
1)字符串默认不用引号表示
str:这是字符串类型
# 转为JavaScript { str:'这是字符串类型' }
2)字符串之中包含空格或特殊字符,需要加引号
str:'类型:字符串'
# 转为JavaScript { str:'类型:字符串' }
3)单引号和双引号都可以使用,双引号不会对特殊字符转义
str1:'类型1\n字符串'
str2:"类型2\n字符串"
# 转为JavaScript { str1:'类型1\\n字符串',str2:'类型2\n字符串' }
4)单引号之中如果还有单引号,必须连续使用两个单引号转义
str1:'It''s a nice day'
# 转为JavaScript { str1:'It\'s a nice day' }
5)字符串换行,从第二行开始,必须有一个单空格缩进,换行符会转为空格
str:这是
一段
多行字符串
# 转为JavaScript { str:'这是 一段 多行字符串' }
6)多行字符串可以使用|
保留换行符,也可以使用>
折叠换行
this: |
Foo
Bar
that: >
Foo
Bar
# 转为JavaScript { this: 'Foo\nBar\n', that: 'Foo Bar\n' }
7)+
表示保留文字块末尾的换行,-
表示删除字符串末尾的换行
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
# 转为JavaScript { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
8)字符串之中可以插入 HTML 标记
message: |
<p style="color: red">
段落
</p>
# 转为JavaScript { message: '\n<p style="color: red">\n 段落\n</p>\n' }
8. 引用
1)& 锚点和 * 别名,可以用来引用
如:& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点
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
2)
- &showell Steve
- Clark
- Brian
- Oren
- *showell
相当于:
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]