虽然我们小组项目的API不是我设计的,但是我也学习了一下YAML语法,在此做一些总结。
参考链接
基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进不要求空格数量,需要相同层级左对齐
- 使用
#
表示注释 - 字符串可以不用引号
支持的数据结构
- 对象:键值对的集合,又称为mapping, hashes, dictionary
- 数组:一组按顺序排列的值,又称为sequence, list
- 常量:不可再分的值
对象
使用key: value
格式表示一个对象:
animal: pets
{animal: 'pets'}
数组
使用一个短横线加一个空格代表一个数组项:
- Cat
- Dog
- Goldfish
['Cat', 'Dog', 'Goldfish']
数组中嵌套子数组,在子数组前面添加空格:
-
- Cat
- Dog
- Goldfish
[['Cat', 'Dog', 'Goldfish']]
复合结构
对象和数组可以一起使用,形成复合结构:
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
- 时间
- 日期
数值表示:
number: 3.14
{number: 3.14}
布尔值使用true
或false
表示:
isSet: true
{isSet: true}
null使用~
表示:
parent: ~
{parent: null}
日期采用复合iso8601格式的年月日表示:
date: 2019-06-18
{date: new Date('2019-06-18')}
使用两个感叹号执行强制类型转换:
a: !!str 123
b: !!str true
{a: '123', b: 'true'}
字符串
字符串可以不用引号:
str: 这是一行字符串
{str: '这是一行字符串'}
如果字符串包含空格或特殊字符,需要引号:
str: 'content: string'
{str: 'content: string'}
即可以使用单引号也可以使用双引号,不同之处在于双引号不会对特殊字符进行转义:
s1: 'content\nstring'
s2: "content\nstring"
{s1: 'content\\nstring', s2: 'content\nstring'}
单引号中如果还有单引号,需要使用单引号进行转义:
str: 'labor''s day'
{str: labor\'s day}
字符串可以写成多行,从第二行开始需要一个空格缩进,换行符会被转为空格:
str: 这是一段
多行
字符串
{str: '这是一段 多行 字符串'}
多行字符串使用|
保留换行符,使用>
空格替换换行符,使用+
保留字符串末尾的换行符,使用-
删除字符串末尾的换行符:
accomplishment: >
Mark set a major league
home run record in 1998.
stats: |
65 Home Runs
0.278 Batting Average
结果为:
accomplishment=Mark set a major league home run record in 1998.
stats=65 Home Runs
0.278 Batting Average
引用
&
用于建立锚点,<<
表示合并到当前数据,*
用于引用锚点:
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_development
<<: *defaults
等同于如下代码:
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_development
adapter: postgres
host: localhost