介绍

YAML(发音 /ˈjæməl/):专门用来写配置文件的语言

语法规则

  • 大小写敏感

  • 使用缩进表示层级关系

  • 缩进时不允许使用Tab键,只允许使用空格

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  • #表示注释

支持的数据结构

  • 对象:键值对的集合,映射(mapping) | 哈希(hashes) | 字典(dictionary)

  • 数组:一组按次序排列的值,序列(sequence) | 列表(list)

  • 纯量(scalars):单个的、不可再分的值;字符串 | 布尔值 | 整数 | 浮点数 | Null | 时间 | 日期

对象

冒号结构

  1. animal: pets
  1. // js
  2. { animal: 'pets' }

数组

  1. - Cat
  2. - Dog
  3. - Goldfish
  1. // js
  2. [ 'Cat', 'Dog', 'Goldfish' ]

复合结构

  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. { languages: [ 'Ruby', 'Perl', 'Python' ],
  2. websites:
  3. {
  4. YAML: 'yaml.org',
  5. Ruby: 'ruby-lang.org',
  6. Python: 'python.org',
  7. Perl: 'use.perl.org'
  8. }
  9. }

纯量

字符串

  1. s1: '内容\n字符串'
  2. s2: "内容\n字符串"
  3. str: 'labor''s day'
  1. { s1: '内容\\n字符串', s2: '内容\n字符串', str: 'labor\'s day' }

多行字符串可以使用|保留换行符,也可以使用>折叠换行

+表示保留文字块末尾的换行,-表示删除字符串末尾的换行

  1. s1: |
  2. Foo
  3. s2: |+
  4. Foo
  5. s3: |-
  6. Foo
  1. { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

&用来建立锚点(defaults),<<表示合并到当前数据,*用来引用锚点。

  1. - &showell Steve
  2. - Clark
  3. - Brian
  4. - Oren
  5. - *showell
  1. [ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]

其他

  1. number: 12.30
  2. isSet: true
  3. parent: ~
  4. iso8601: 2001-12-14t21:59:43.10-05:00
  5. date: 1976-07-
  6. e: !!str 123
  7. f: !!str true
  1. {
  2. number: 12.30,
  3. isSet: true,
  4. parent: null,
  5. iso8601: new Date('2001-12-14t21:59:43.10-05:00'),
  6. date: new Date('1976-07-31'),
  7. e: '123', f: 'true'
  8. }