Niffler

X2.05 15352103-YAML语法总结

Posted By 15352103

虽然我们小组项目的API不是我设计的,但是我也学习了一下YAML语法,在此做一些总结。

参考链接

YAML语言教程

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}

布尔值使用truefalse表示:

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