背景说明

YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便。YAML 语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

解决方案

基本语法

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进是不使用 tab 键,只允许使用空格
  4. 缩进的空格数目不重要,只要相同层级左侧的元素对其即可
  5. “ # “ 表示注释,从这个字符一直到行尾都会被解释器忽略

    数据类型

    纯量类型

    纯量是最基本的,不可再分的值,包括:

  6. 字符串

  7. 布尔值
  8. 整数
  9. 浮点数
  10. Null
  11. 时间
  12. 日期

字符串: name或者’Hello world’可以使用双引号或者单引号包裹特殊字符,例如包含空格
布尔值: true/True/false/False
整数: 123
浮点数: 3.14
Null: 使用~表示null
时间: 2018-02-17T15:02:31+08:00时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
日期: 2018-02-17日期必须使用ISO 8601格式,即yyyy-MM-dd

对象类型

对象是一组键值对,使用冒号结构表示,冒号后面要加一个空格

  1. name: zhangsan

或者使用行表示方式

  1. {name: zhangsan}

数组类型

一组连词线开头的行,构成一个数组

  1. nameList:
  2. - zhagnsan
  3. - lisi
  4. - mazi

也可以使用如下方式,名称和内容之间通过空格表示层级

  1. nameList:
  2. - zhagnsan
  3. - lisi
  4. - mazi

或者使用行表示方式

  1. nameList: [zhagnsan,lisi,mazi]

不推荐行表示方式,不便于阅读

复合类型

对象和数组可以结合使用,形成复合结构,例如对象数组

  1. companies:
  2. -
  3. id: 1
  4. name: company1
  5. price: 200
  6. -
  7. id: 2
  8. name: company2
  9. price: 500

例如数组类型+对象类型

  1. languages:
  2. - Ruby
  3. - Perl
  4. - Python
  5. websites:
  6. YAML: yaml.org
  7. Ruby: ruby-lang.org
  8. Python: python.org
  9. Perl: use.perl.org

锚点引用

这里不做说明,实际使用较少,举例如下

  1. defaults: &defaults
  2. adapter: postgres
  3. host: localhos
  4. development:
  5. database: myapp_development
  6. <<: *defaults
  7. test:
  8. database: myapp_test
  9. <<: *defaults

翻译后如下

defaults:
    adapter: postgres
    host: localhos
development:
    database: myapp_development
    adapter: postgres
    host: localhos
test:
    database: myapp_test
    adapter: postgres
    host: localhos