YAML 格式说明

Yaml 记录常用 YAML 语法

YAML(“YAML Ain’t a Markup Language”/”Yet Another Markup Language”)和 XML 相比更加专注于数据本身而非格式,具有较好的可读性,越来越多的被用于配置文件。

  • YAML 文件的后缀名是.yml
  • YAML 可以多文件合并,适合配置文件分块的场景

基本语法

  • 大小写敏感
  • 以缩进表示对象层级关系(类似 Python)
    • 必须用空格做缩进
    • 锁进的空格数量不重要,只要相同层级的左对齐即可
  • 变量/字段名后紧接: ,注意:后必须有个空格
  • #标记单行注释,不支持多行注释
  • ---可以在一个文件中分割多块 yaml;...表示文档结束

数据类型及示例

  • scalars(纯量)

    • string str1: string1

      • 字符串可以用"'包裹,也可以不加引号。
        • 如果有特殊字符,必须用"'包裹
        • '包裹的内容会直接显示;"会转义
        • '中的内容如果包含',则要用''转移
      • 字符串可以多行表示,如果用>每个换行符会被转换为一个空格
      • 表示多行文本

        • |文中自动换行标志

          1
          2
          3
          1
          2
          3
          name: |
            content1...
            content2...
          
          1
          2
          3
          content1...
          content2...
          
          
          • |全文最后一个换行
          • |-全文最后无换行
          • |+全文最后两个换行
        • >文中不自动换行,以空格代替换行

          1
          2
          3
          1
          2
          3
          name: |
            content1...
            content2...
          
          1
          2
          content1... content2...
          
          
          • >全文最后一个换行
          • >-全文最后无换行
          • >+全文最后两个换行
        • |2减少缩进标志 表示实际内容比当前表示的内容向前减少两个空格缩进

    • boolean TRUE/True/true/FALSE/False/false
    • float 3.14 或用科学表示法: 3.1415e+5
    • int 123 或二进制表示:0b1010_0111_0100,中间的_是为了人眼容易识别
    • null 用’~’表示 null:value: ~
    • date 2018-02-17, 日期必须使用 ISO 8601 格式,即 yyyy-MM-dd
    • datetime 2018-02-17T15:02:31+08:00 ,时间使用 ISO 8601 格式,时间和日期之间使用 T 连接,最后使用+代表时区
  • array(数组) array 可以嵌套
    • -表示: ```yml array:
      • element1
      • element2 ```
    • 用行内形式表示: array: [element1, element2] array: [] # 空数组
    • 行内形式的字符串要用"包裹
  • object(对象/map) object 可以嵌套
    • 多行表示:
      1
      2
      3
      4
      obj:
      field1: 1.2
      field2: hello
      "3field": "content" # 对于 key 以数字开头的,可以用 ' 包住
      
    • 单行表示: obj: {field1: 1.2, field2: "hello"} obj: {} # 空对象
  • array 元素为 object

    1
    2
    3
    4
    5
    array:
      - field1: 1.2
        field2: hello # 这里和上面对齐表示同级字段
      - field1: 1.1
        field2: world
    
  • 表示多维数组,一般用-表示第一维,[]表示剩下的维度,如:
1
2
3
4
5
6
7
8
9
# 二维
array:
  - [1, 2]
  - [3, 4]
  - [5, 6]

# 三维
array:
  - [[1,2], [3,4]]

引用

&xxx标记锚点起始点、*xxx引用锚点内容、<<: 合并到当前数据; &表示开启一个锚点,记录子元素或当前元素,遇到同级下个元素就停止记录。

1
2
3
4
5
6
7
8
9
# 普通标记示例
- &anchor name1
- name2
- *anchor

# 上面等价于
- name1
- name2
- name1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 合并数据示例
defaults: &defaults
  name: name1

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

# 上面等价于
defaults:
  name: name1

development:
  database: myapp_development
  name: name1

test:
  database: myapp_test
  name: name1