YAML文件

相较于JSON,YAML的可读性更好,利用缩进表示结构省去了诸如{}[]等符号表示。主要用于配置文件,如K8S、DevOps等。

基本特点

  • 缩进必须使用空格(通常是2或4个空格),不能用Tab。
  • 支持#注释标注
  • 大小写敏感
  • 基本元素采用键值对定义,如key: value(冒号后面一般都需要加空格)

数据类型

标量(不可再分类型)

  • 字符串:正常不需要引号,但如果包含特殊字符(如 :#{}),则需要用单引号 ' 或双引号 " 括起来
  • 布尔值:大写或小写的true/false
  • 整数/浮点数
  • 空值:null/~

序列 List

格式:短横线+同样的缩进 诸如:

1
2
3
4
listVar:
  - a
  - b
  - c

映射(对象/字典) Mapping

诸如:

1
2
3
4
mapVar:
  a: aa
  b: bb
  c: cc

多行字符串

  • 字面块(|):保留换行符
  • 折叠块(>):将换行符折叠为空格

诸如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
message: |
  This is a long
  multi-line string
  that will preserve its line breaks.
  
# 解析:This is a long\nmulti-line string\nthat will preserve its line breaks.\n"

message: >
  This is a long
  multi-line string
  where lines are folded into spaces.

# 解析:This is a long multi-line string where lines are folded into spaces.\n"

结构嵌套

诸如:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
users:          # 这是一个键(key),它的值是一个列表(List)
  - name: John  # 这是列表中的第一个元素,它是一个字典/映射(Mapping)
    age: 30     # 这是第一个元素字典中的一个键值对
    hobbies:    # 这是第一个元素字典中的一个键,它的值又是一个列表
      - hiking  # 这是“hobbies”列表中的第一个元素
      - reading # 这是“hobbies”列表中的第二个元素
  - name: Jane  # 这是列表中的第二个元素,它是另一个字典/映射
    age: 25
    hobbies:
      - gaming  # 这是第二个元素中“hobbies”列表里的元素

对应的JSON格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
{
  "users": [
    {
      "name": "John",
      "age": 30,
      "hobbies": ["hiking", "reading"]
    },
    {
      "name": "Jane",
      "age": 25,
      "hobbies": ["gaming"]
    }
  ]
}

多文档支持

一个yaml文件可以包含多个yaml定义,并用---分隔