终于将YAML配置文件语法讲清楚了
简介
Yaml是一种可读性高的数据标记语言,Yaml文件是一种配置文件,一般主要用于 存储全局配置信息 等,可存放不同类型的数据,如列表,字典等。
语法规则
- 文件后缀.yml
- 大小写敏感
- 空格缩进区分层级,且空格数量不要求,对齐即可
-
表示注释
备注:详细用法见数据类型小节例子
数据类型
- 数组:序列/列表,按次序排序的值
- 对象:映射/字典/哈希,键值对
- 标量:单个值,不可再分,如字符串,布尔值,Null等
备注:
- 冒号和‘-’后的值前面需空一个空格
- 字符串不使用引号
- 单引号转义特殊字符、空格等
数组
序列/列表,按次序排序的值
# 数组:如列表numbers:[1,2,3,4,5]
# - 列表值,使用“-”表示列表中的元素
# 表示方式1:
numbers:
#表示方式2:
numbers: [1,2,3,4,5]
对象
映射/字典/哈希,键值对
# 对象:如字典:ab:{"a":1,"b":"哈哈"}
# 表示方式1
b: 哈哈 # 字符串哈哈可不使用引号
# 表示方式2:
ab: {"a":1,"b":"哈哈"}
标量
单个值,不可再分,如字符串,布尔值,Null,日期等
# 标量
# 字符串
name:susy
# 布尔值
isFlag: True
# Null:使用~表示
# 日期:YYYY-MM-DD格式
d: 2023-03-06
# 时间:YYYY-MM-DDThh:mm:ss+时区
t: 2018-02-17T15:02:31+08:00
# 特殊字符、空格
# 使用单引号转义
email: '123@qq.com'
talk: 'Hello World'
复合结构
包含数组,对象,标量等结构
# 复合结构:{"code":200,students:[{name:"张三",age:12,hobby:["打篮球","跑步"]},{name:"李四",age:17,hobby:["打羽毛球","看书"]}]}
# hobby也可以使用行内写法:
# hobby:[打篮球,跑步]
code: 200
students:
name: 张三
age: 12
hobby:
- 打篮球
name: 李四
age: 17
hobby:
- 打羽毛球
- 看书
引用
引用已有键的值,可使用&锚点和*别名来引用,可通俗理解为复制粘贴,可复用yaml文件中已有键值对。
# 键值
# 使用&别名建立锚点,将students全部内容设别名为“stu”
students: &stu
name: zhangsan
age: 12
# 引用键
# 引用students的内容,使用<< *别名即可,<< 表示合并当前数据
class1:
<<: *stu
以上内容被读取后输出为:
# 键值
students:&stu
name: zhangsan
age: 12
# 引用键
class1:**
name: zhangsan
age: 12**
强制类型转换
使用两个感叹号!!可强制转换数据类型。
语法:
key: !!类型名 value
举例:
# 强制将数据类型1转换成字符类型
number: !!str 1
分隔符分隔
yaml若包含多个文档,则使用三条横杆“—-”分隔符分隔
---
# 文件1
# 文件2
b: 2
元素换行
换行主要使用 | 和 > ,|保留行尾换行符,>将行尾换行符替换成空格。
保留字符末尾的换行使用+,删除字符末尾的换行使用-,一般用于与|和>组合使用。
备注:下面的输出是指读取yaml文件后输出的数据格式,可使用后面python读取yaml文件尝试下
|保留行尾换行符,yaml文件输入:
w: |
Hello
World
输出:
{'w': 'Hello\nWorld\n'}
将换行符替换成空,yaml文件输入:
w: >
Hello
World
输出:
{'w': 'Hello World\n'}
组合使用
|与+和-的组合使用情况
|+ :保留行尾及字符末尾的换行符,yaml文件输入:
w: |+
Hello
World
输出:
{'w': 'Hello\nWorld\n'}
|- :保留行尾换行符,但不保留字符末尾的换行符,yaml文件输入:
w: |-
Hello
World
输出:
{'w': 'Hello\nWorld'}
与+和-的组合使用情况
>+ :将行尾换行符替换成空格,保留字符末尾的换行符,yaml文件输入:
w: >+
Hello
World
输出:
{'w': 'Hello World\n'}
>- :将行尾换行符替换成空格,不保留字符末尾的换行符,yaml文件输入:
w: >-
Hello
World
输出:
{'w': 'Hello World'}
多值映射
使用?及:实现多值映射,适用于多个变量存在值相同的情况,如变量1和变量2均存在值1和值2。
变量1: [值1,值2]
变量2: [值1,值2]
使用以下语法表示:
?
- 变量1
- 变量2
- 值2
举例:
# number1: [1,2,3]
# number2: [1,2,3]