终于将YAML配置文件语法讲清楚了

终于将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]