不管是写springboot、docker compose还是k8s配置都用的yml。但是一直没有系统的的学习一下,今天就整体过一遍。
基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素对齐即可
- 使用#注释
数据类型:
- 纯量:单个的、不可再分的值
- 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
- 数组:一组按次序排列的值。
纯量
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
boolean:
- TRUE #true,True都可以
- FALSE #false,False都可以
float:
- 3.14
- 6.8523015e+5 #可以使用科学计数法
int:
- 123
- 0b1010_0111_0100_1010_1110 #二进制表示
null:
nodeName: 'node'
parent: ~ #使用~表示null
string:
- 哈哈
- 'Hello world' #可以使用双引号或者单引号包裹特殊字符
- newline
newline2 #字符串可以拆成多行,每一行会被转化成一个空格
date:
- 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime:
- 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区
对象
对象的一组键值对,使用冒号结构表示
name: danny
使用缩进表示层级
person:
name: Danny
sex: man
或者将所有键值对写成一个行内对象
person: { name: Danny, sex: man }
数组
以-
开头的行表示构成一个数组:
- a
- b
- c
行内表示
key: [a, b, c]
每个元素还可以是一个数组、对象。
-
- a
- b
- c
特殊符号
… 和—配合使用,在一个配置文件中代表一个文件的结束:
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
>
在字符串中折叠换行,|
保留换行符,这两个符号是YAML中字符串经常使用的符号。
this: |
Foo
Bar
that: >
Foo
Bar
转为 JavaScript 如下:
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }