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: 2018-12-14t21:59:43.10-05:00
- 日期表示:
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支持注释,这是YAML相比JSON的一个优点。
YAML的注释使用“#”开头,如下所示。
languages: - Ruby # 这是Ruby语言 - Go # 这是Go语言 - Python # 这是Python语言