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语言

 

参考文档