YAML(发音 /ˈjæməl/ )是一种专门用户描述数据的简单语言,支持复杂的可嵌套的数据结构。其基本的语法规则是:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
标量定义
字符串
字符串可以用单引号或者双引号进行包裹起来,在有些情况下也可以不用引号。
A string in YAML
'A singled-quoted string in YAML'
"A double-quoted string in YAML"
如果字符串的首部或者尾部有空白字符,那么必须使用引号,否则在解析文件的时候会将首部和尾部的空白字符移除。
如果在字符串中包含下面的字符,必须要使用引号,如果你使用单引号的话可以避免转义,如果使用双引号那么在下面的字符前面必须使用转义字符“\”:
:, {, }, [, ], ,, &, *, #, ?, |, -, <, >, =, !, %, @, `
如果在字符串中包含了如下的控制字符,必须要使用双引号
\0, \x01, \x02, \x03, \x04, \x05, \x06, \a, \b, \t, \n, \v, \f, \r, \x0e, \x0f, \x10, \x11, \x12, \x13, \x14, \x15, \x16,\x17, \x18, \x19, \x1a, \e, \x1c, \x1d, \x1e, \x1f, \N, \_, \L, \P
此外,在下面这几种情况下也必须使用引号进行包裹:
- 当字符串是 true 或者 false (否则的话,会被认为是一个布尔值);
- 当字符串是 null或者 ~ (否则的话,会被认为是一个null);
- 当字符串像一个数字,比如整数(2,4)、浮点数(2.6,12.3)、科学计数(12e7)等等可以被看作是数字的字符串;
- 当字符串看起来像一个日期格式(2014-12-31);
如果想通过多行编写的方式来定义一个字符串,那么可以使用“>”,换行符会被替换为1个空格字符。
>
This is a very long sentence
that spans several lines in the YAML
but which will be rendered as a string
without carriage returns.
每行前面使用2个空格字符表明继续使用前一种定义语法,并且不会出现在最终的字符串中。
数字
# 整数
12
# 八进制
014
# 十六进制
0x0C
# 浮点数
13.4
# 科学计数法
1.2e+34
# 无穷大
.inf
空值
null或者~
布尔值
true和false
日期
使用ISO-8601标准
2001-12-14t21:59:43.10-05:00
# 简单的日期
2002-12-14
集合
使用间断字符“-”来定义元素序列
- PHP
- Perl
- Python
相当于PHP中的
array('PHP', 'Perl', 'Python');
键值对的表示方式:
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20
相当于PHP中的
array('PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20');
YAML中使用缩进或者更多的空格字符来表示嵌套的数据结构,比如下面:
'symfony 1.0':
PHP: 5.0
Propel: 1.2
'symfony 1.2':
PHP: 5.2
Propel: 1.3
相当于PHP中:
array(
'symfony 1.0' => array(
'PHP' => 5.0,
'Propel' => 1.2,
),
'symfony 1.2' => array(
'PHP' => 5.2,
'Propel' => 1.3,
),
);
注意:缩进必须使用1个或者更多的空格字符,而不能使用制表符。你也可以使用下面这种嵌套方式:
'Chapter 1':
- Introduction
- Event Types
'Chapter 2':
- Introduction
- Helpers
序列的定义也可是使用下面的方式:
[PHP, Perl, Python]
嵌套数组的定义也可以使用下面的方式:
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }
你也可以混合搭配着使用,以提高代码的可读性:
'Chapter 1': [Introduction, Event Types]
'Chapter 2': [Introduction, Helpers]
'symfony 1.0': { PHP: 5.0, Propel: 1.2 }
'symfony 1.2': { PHP: 5.2, Propel: 1.3 }
注释
YAML采用行注释,使用“#”
# 注释一行
"symfony 1.0": { PHP: 5.0, Propel: 1.2 } # 在行尾进行注释
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }