yaml学习
基本语法
#大小写敏感
One: 1
one: 2
#用缩进标识层级关系,空格数量不重要,同一级的元素左侧必须对齐
one:
two: 2
three:
four: 4
five: 5
#只支持单行注释,用#表示注释
#一个文件中可以包含多个文件内容,
# 用---即表示一份内容的开始
# 用...表示一份内容的结束(非必须)
---
#第一份内容
one: 1
...
---
#第二份内容
one: 2
数据结构与类型
除了下面的这些类型,yaml也支持一些更高级的类型,但并一定兼容所有解析器,包括集合,有序映射、十六进制数据等
##########################
# 对象(mapping) #
##########################
# 对象(Mapping),表示以键值对形式出现的数据,使用 冒号+空格 来分开键与值
# - 支持多层嵌套,用缩进表示层级关系
# - 支持流式风格的语法(用花括号包裹,用逗号加空格分隔,类似json)
# - 使用?声明一个复杂对象,允许用多个词汇(数组)来组成键
key:
sub-key1: v1
sub-kye2: v2
another: {key1: v1, key2: v2}
?
- keypart1
- keypart2
:
- value1
- value2
##########################
# 数组(sequence) #
##########################
# 数组 一组以区 块(即减号+空格)开头的数据组成一个数组
# - 支持内联格式(方括号包裹,逗号加空格分隔,类似json)
# - 支持多为数组,缩进表示层级关系
values: # "values":{"v1", "v2", "v3"}
- v1
- v2
- v3
values: [v1, v2, v3]
values: # json "values":[["v1","v2"],["v3","v4"]]
-
- v1
- v2
-
- v3
- v4
##########################
# 标量 yaml中的基本数据类型 #
##########################
## 字符串,一般不需要引号包裹,如果字符串中使用了反斜杠\开头的转义字符就必须使用引号包裹
## - 多行文字,提供两种特殊语法支持
## - 保留换行,使用 | 来表示该语法,每行的缩进和行位空白都会被去掉,而额外的缩进会保留
## - 折行换行,使用 > 来标识该语法,只有空白行被识别为换行,原来的换行符都转换为空格
strings:
- Hello without quote # 不用引号包裹
- Hello
world # 拆成多行后会自动在中间添加空格
- 'Hello with single quotes' # 单引号包裹
- "Hello with double quotes" # 双引号包裹
- "I am fine. \u263A" # 使用双引号包裹时支持 Unicode 编码
- "\x0d\x0a is \r\n" # 使用双引号包裹时还支持 Hex 编码
- 'He said: "Hello!"' # 单双引号支持嵌套"
# json "lines": "1line\n2line\n 3line\n 4line\n5line"
lines: |
1line
2line
3line
4line
5line
# json "lines": "1line 2line\n3line"
lines: >
1line
2line
3line
## bool值
boolean:
- true # True、TRUE、yes Yes、YES
- false # False、FALSE、no、No、NO
## 整数
int:
- 666
- 0001_0000 #二进制
## 浮点数
float:
- 3.14
- 6.8532e+5 #科学计数
## 空(null),不指定也是空
nulls:
- null
- Null
- ~
-
## 时间戳 支持ISO 8601格式的时间数据
date1: 2020-05-26
date2: 2020-05-26T01:00:00+08:00
dete3: 2020-05-26T02:00:00.10+08:00
date4: 2020-05-26 03:00:00.10 +8
## 类型转换
## - 支持使用严格类型标签 双感叹号+目标类型 来强制转换类型
a: !!float '666' # !! 为严格类型标签
b: '666' # 其实双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串
数据重用与合并
# 提供通过锚点标签 & 引用标签 * 组成的语法,可以快速重用数据
# 配合合并标签 << 可以与任意数据进行合并,类似于面向对象里的继承
human: &base #设置锚点
body: 1
hair: 999
human-new: *base #引用锚点,human和human-new有相同的内容
singer:
<<: *base #引用base锚点
skill: sing #添加额外属性
programer:
<<: *base #引用base锚点
hair: 6 #覆盖base中属性
skill: code #添加额外属性