一、简介

YAML是一个可读性高,用来表达数据序列化的格式。

官网地址:https://yaml.org/

二、格式

1. 单行缩进

YAML可以用来描述好几行相同结构的数据的缩写语法,数组用"[]“括起来,hash使用”{}",

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

2. 多行缩进

数据结构也可以使用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过"-“来表示,map结构里key/value对用冒号”:"来分隔

#上面数据转化后的效果
house:
  family:
    name: Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

三、数据类型

YAML会自动判定数据形态是哪一种实体。如果用户想要将数据强制转换成自定义的类型。

---a: 123                  # 整数
b: "123"                   # 字串(使用双括号)
c: 123.0                   # 浮点数
d: !!float 123             # 浮点数,使用!!表达的严格型态
e: !!str 123               # 字串,使用严格型态
f: !!str Yes               # 字串,使用严格型态
g: Yes                     # 布林值"真"
h: Yes we have No bananas  # 字串(包含"Yes"和"No")

四、语法

  1. 使用空白字符为文件缩进来表示结构(不可以使用TAB
  2. 注解:#,可以出现在一行中的任何位置,而且范围只有一行(单行注解)
  3. 数组(我自己理解的):以单行表示,使用- 开始;或者使用[],成员之间使用, (后面有空格)隔开。
  4. Map:使用: 分开键和值;或者使用{},成员之间使用, (后面有空格)隔开。
    键可以使用开始,用来明确的表示多个词汇组成的键值。
  5. 字符串:平常不使用引号,必要时可以使用""''
    使用"",有时需要\,转义
  6. null:空值,使用~
  7. 区分多个文件:在单一文件中,可以使用- - -,区分多个文件。可以使用...表示文件结尾。
  8. 重复的内容可以使用*,复制&标记的内容。<<表示合并到当前数据
  9. 强制转型:!!
  10. 指导指令:
  • %YAML 指导指令,用来识别文件的YAML版本。
  • %TAG 指导指令,被用在URI的前缀标记。这个方法在标记节点的类型时相当有用。

五、简单示例

#第一个文件
---
#数组
arr1: [java, c++, python]
arr2:
    - java
    - c++
    - python
#map
people1:
    name: 'jack'
    age: 12
    weight: !!float 12.00
people2: {name: lili, age: 18, weight: 80}

#空值
people3: ~

...
#第二个文件
---
people: &people
    eat: !!str 吃饭
    sleep: "睡觉"
jack:
  <<: *people
  age: 18
  
...