更新时间:2023-09-26 GMT+08:00

YAML语法

YAML 是一种简洁强大的语言,它的设计目标是便于设计和使用人员阅读。

基本语法规则

  • 大小写敏感。
  • 使用缩进表示层级关系。
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,要求相同层级的元素左侧对齐。
  • 使用#表示注释。

YAML支持三种数据结构

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

对象

对象是一组键值对(key: value,冒号后面必须有一个空格或换行),合法的表示方法如下:

animal: pets
plant:
  tree

也可以将多个键值对写成一个行内对象:

hash: {name: Steve, foo: bar}

下面这种情况会出错

foo: somebody said I should put a colon here: so I did
windows_drive: c:

用引号括起来就没有问题,如下所示

foo: 'somebody said I should put a colon here: so I did'
windows_drive: 'c:'

数组

数组使用连字符和空格“- ”表示,合法的表示方法如下:

animal:
- Cat
- Dog
- Goldfish

也可使用行内表示法:

animal: [Cat, Dog, Goldfish]

对象和数组可以嵌套使用,形成复合结构:

languages:
 - Ruby
 - Perl
 - Python
websites: 
 YAML: yaml.org
 Ruby: ruby-lang.org
 Python: python.org
 Perl: use.perl.org

纯量

纯量的数据类型有字符串、布尔值、整数、浮点数、Null、时间、日期。

  • 字符串表示:

    字符串默认不使用引号表示:

    str: This_is_a_line

    如果字符串之中包含空格或特殊字符,需要放在引号之中:

    str: 'content: a string'

    单引号和双引号都可以使用,两者区别是单引号可以识别转义字符:双引号不会对特殊字符转义:↵

    s1: 'content:\n a string'
    s2: "content:\n a string"

    单引号之中如果还有单引号,必须连续使用两个单引号转义。

    str: 'labor''s day'

    字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。

    str: This_is
     a_multi_line
  • 整数表示:
    int_value: 314
  • 浮点型表示:
    float_value: 3.14
  • Null表示:
    parent: ~
  • 时间表示:

    时间采用ISO8601格式。

    iso8601: 2018-12-14t21:59:43.10-05:00
  • 日期表示:

    日期采用复合ISO8601格式的年、月、日表示。

    date: 1976-07-31

一些特殊符号

  • “---”表示一个Yaml文件的开始,“...”表示一个Yaml文件的结束。
---
# 一个美味水果的列表
- Apple
- Orange
- Strawberry
- Mango
...
  • 对于整数型、浮点型、布尔型数据用两个感叹号“!!”进行强制转换:
strbool: !!str true
strint: !!str 10
  • 多行字符串可以使用“|”保留换行符,也可以使用“>”折叠换行。这两个符号是Yaml中字符串经常使用的符号。
this: |
 Foo
 Bar
that: >
 Foo
 Bar

对应的对象为:

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

一般推荐使用“|”就能够满足大多数场景了。

注释

YAML支持注释,这是YAML相比JSON的一个优点。

YAML的注释使用“#”开头,如下所示。

languages:
 - Ruby                # 这是Ruby语言
 - Go                  # 这是Go语言
 - Python              # 这是Python语言