语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用tab键,只允许使用空格。空格的数量不重要,只需要保证同级元素左对齐
- # 表示 行 注释
数据结构
- 对象:键值对的集合。又被称为 映射/哈希/字典
- 数组:一组按次序排列的值。又称为序列/列表
- 纯量(scalars):单个的不可再分的值。
对象
对象的一组键值对,使用冒号结构表示,冒号后面一定要有一个空格
# 相当于 {'animals': 'pets'}
animals: pets
# 相当于 {'hash': {'name': steve, 'age': '18'}}
hash: {name: steve, age: 18}
数组
一组连线词开头的行,够成一个数组。连线词后面一定要有一个空格
# 一个层级。相当于 ['cat', 'dog', 'goldfish']
- cat
- dog
- goldfish
# 两个层级。相当于 [['cat', 'dog', 'goldfish']] 嵌套了!!!
-
- cat
- dog
- goldfish
# 行内表示法。相当于 {'animals': ['cat', 'dog']}
animals: ['cat', 'dog']
对象和数组构成的复合结构的例子
languages:
- Ruby
- Perl
- Python
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
# 相当于:
# {'languages': ['Ruby', 'Perl', 'Python'],
# 'websites': {
# 'YAML': 'yaml.org',
# 'Ruby': 'ruby-lang.org',
# 'Python': 'python.org',
# 'Perl': 'use.perl.org',
# }
# }
纯量
字符串
布尔值
整数
浮点数
Null
时间
日期
- 字符串可以直接输入,但是在包含 冒号 空格等特殊字符时,可以使用
- 单引号:会转义特殊字符如 \n \t
- 双引号:不会转义特殊字符
- 布尔值用 true 和 false
- null 用 ~ 表示
- 时间采用 ISO8601 格式
time: 2001-12-24t21:59:43.10-05:00
- 日期采用ISO8601格式
date: 1976-07-31
引用
&
用于建立锚点<<
表示合并到当前数据*
用于引用锚点
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myAPP_development
<<: *defaults
# 上面的例子等同于: 注意只是将锚点内的数据插入到当前数据!!!不会将锚点整个挪过来
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myAPP_development
adapter: postgres
host: localhost
YAML解析
请参看这篇文档