YAML:YAML Ain’t a Markup Language
YAML:YAML不是一种标记语言
YAML官网:YAML
YAML发音是:/ˈjæməl/,类似于:鸭某。
如上所示,YAML
是“YAML Ain’t a Markup Language”的递归缩写(YAML不是标记语言)。
YAML是专门用来写配置文件的语言。
在YAML语言开发的时候,实际上,YAML
的意思是“Yet Another Markup Language”(仍然是另一种标记语言)。
YAML可以简单表示清单、散列表、标量等数据,使用空白来缩进和大量依赖外观的特色,适合用来表达或者编辑数据结构、配置文件、倾印调试内容、文件大纲等等。
YAML文件扩展名为.yml
。
语法规则
- 大小写敏感
- 使用缩进表示层级结构,且不能用tab只能用空格space,缩进的空格数量不重要,只要相同层级左对齐即可
- 用
#
进行单行注释
数据类型
- 对象:键值对的集合,又称为映射、哈希、字典。
键值对写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| key: value
key: {key1: value1, key2: value2, ...}
key: key1: value1 key2: value2
? - key1 - key2 : - value1 - value2
|
- 数组:一组有次序的值,又称为序列、列表。
数组以-
开头:
多维数组:
1
| key: [value1, value2, value3]
|
数组结构的子成员是一个数组:
复杂数组实例:
1 2 3 4 5 6 7 8 9 10 11 12 13
| microsoft: - id: 001 name: wong salary: 15w - id: 002 name: lee salary: 20w
microsoft: [{id: 001,name: wong,salary: 15w},{id: 002,name: lee,salary: 20w}]
|
- 数组和对象的复杂结构
1 2 3 4 5 6 7 8 9 10 11 12
| languages: - Ruby - Perl - Python
websites: YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
|
对应的json:
1 2 3 4 5 6 7 8 9
| { languages: [ 'Ruby', 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } }
|
- 纯量:原子值
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| string: - 'Hello World' - HelloWorld - line1 line2 boolean: - true - false int: - 4869 - 0b1001_1001_1110_1011 float: - 3.1415 - 1.23e+2 null: name: 'node' parent: ~ datetime: - 2020-5-12T14:55:02+08:00 date: - 2020-5-12
|
- 引用
锚点:&
用来建立锚点。
别名:*
用来引用锚点。
合并:<<
用来合并引用的锚点数据到当前数据。
实例1:
1 2 3 4 5 6
| classA: &classA student1: wong student2: lee classB: student3: queen <<: *classA
|
以上代码相当于:
1 2 3 4 5 6 7
| classA: student1: wong student2: lee classB: student3: queen student1: wong student2: lee
|
实例2:
1 2 3 4 5
| names: - &bruce bruce - lee - wong - *bruce
|
以上代码相当于:
1 2 3 4 5
| names: - bruce - lee - wong - bruce
|
参考
阮一峰YAML语言教程