YAML

概念

YAML 是 “YAML Ain’t Markup Language” 的递归缩写。它是一种直观的能够被人轻松阅读的的数据序列化语言。YAML 主要用于:

  • 配置文件
  • 在网络上存储或传输数据
  • 作为许多语言(如 Python, Ruby, Java 等)的 datafile 格式

语法

YAML的语法比较简单,主要有下面几个:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许空格( 低版本限制 )
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可
  • ‘#’表示注释

YAML支持以下几种数据类型:

  • 纯量:单个的、不可再分的值
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hash) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)

下面是 YAML 的一些基本语法规则:

键值对

使用冒号(:)来分隔键和值,键值对之间使用空格或制表符进行缩进。

1
2
3
name: John
age: 30
city: New York

列表

使用短横线(-)表示一个列表项,列表项之间使用空格或制表符进行缩进。

1
2
3
4
fruits:
- apple
- banana
- orange

嵌套

可以使用缩进来表示嵌套关系,缩进的空格数不限,但同级别的元素必须使用相同数量的空格。

1
2
3
4
5
6
7
8
person:
name: John
age: 30
city: New York
hobbies:
- reading
- music
- sports

还可以在数组中嵌套对象

1
2
3
4
5
6
7
8
9
10
fruits:
- name: apple
color: red
origin: USA
- name: banana
color: yellow
origin: Brazil
- name: orange
color: orange
origin: Spain

**fruits**是一个数组,包含了三个对象,每个对象都有 **namecolor**和 origin 三个键值对。在数组中嵌套对象时,可以使用短横线(-)表示数组的每个元素,并在元素下面缩进表示嵌套的对象。注意,缩进的空格数不限,但同级别的元素必须使用相同数量的空格。

注释

使用井号(#)来表示注释,注释从井号开始到行末结束。

1
2
3
# 这是一个注释
name: John
age: 30

引用:

可以使用单引号(’)或双引号(”)来引用字符串,引用的字符串可以包含特殊字符。

1
2
3
name: 'John'
age: "30"
city: "New York"

特殊字符处理

使用双引号可以处理包含特殊字符的字符串,例如换行符、制表符等。

1
message: "Hello,\n\tWorld!"

下面是一个包含上述语法规则的完整 YAML 示例:

1
2
3
4
5
6
7
8
9
10
yamlCopy code
person:
name: John
age: 30
city: New York
hobbies:
- reading
- music
- sports

这是一个简单的包含了键值对和列表的 YAML 示例,表示了一个人的信息和爱好。需要注意的是,YAML 对缩进要求严格,因此在编写 YAML 文件时要注意缩进的正确使用。

多行字面量

在 YAML 中,竖线符号(**|**)表示一种多行字面量的写法。使用 | 后,紧接着的多行文本会保留其换行符和缩进,不会被自动转义或折叠。

下面是一个示例:

1
2
3
4
5
description: |
This is a multi-line
text block in YAML.
It preserves line breaks
and indentation as is.

在上面的示例中,**description** 是一个键,其值使用了 | 符号,后面紧跟了一个多行文本块,包含了三行文本。这三行文本的换行符和缩进会被保留,不会被自动转义或折叠。这在需要保留文本格式或保留特定缩进的情况下非常有用,比如文本块、脚本、代码段等。

JSON to yaml 工具
https://www.json2yaml.com/convert-yaml-to-json