YAML
YAML 是一个可读性高,用来表达资料序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。
YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。
yaml转换网站点这里。
来一段直观的对比吧:
<Servers>
<Server>
<name>Server1</name>
<owner>John</owner>
<created>123456</created>
<status>active</status>
</Server>
</Servers>
{
"Servers": {
"Server": {
"name": "Server1",
"owner": "John",
"created": "123456",
"status": "active"
}
},
}
# 一般用两个空格吧,一个空格看起来有点不清晰
Servers:
Server:
name: Server1
owner: John
created: 123456
status: active
语法特点
大小写敏感
通过缩进表示层级关系
禁止使用tab缩进,只能使用空格键
缩进的空格数目不重要,只要相同层级左对齐
使用#表示注释
数据类型
集合
# 数组
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Map(键值对)
hr: 65 # Home runs
avg: 0.278 # Batting average
rbi: 147 # Runs Batted In
---
# 上面的组合形式
# Map中的Value是一个数组
american:
- Boston Red Sox
- Detroit Tigers
- New York Yankees
national:
- New York Mets
- Chicago Cubs
- Atlanta Braves
# 数组的元素是一个结构体,
# 结构体中每一个成员以Map的形式保存
-
name: Mark McGwire
hr: 65
avg: 0.278
-
name: Sammy Sosa
hr: 63
avg: 0.288
---
# 变体形式,感觉不常用
# 变体1
- [name , hr, avg ]
- [Mark McGwire, 65, 0.278]
- [Sammy Sosa , 63, 0.288]
# 变体2
Mark McGwire: {hr: 65, avg: 0.278}
Sammy Sosa: {
hr: 63,
avg: 0.288
}
文档结构
YAML使用三个连续的短横(---)来分割文档的内容。
(---):表示文档的开头
(...):表示文档的结束
# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey
# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...
语法
引号的区别
单引号(''):特殊字符作为普通字符处理
双引号(""):特殊字符作为本身想表示的意思
# 单引号
name: 'Hi,\nTom'
# 双引号
name: "Hi,\nTom"
内置类型列表
YAML运行使用感叹号(!)强制转换数据类型:
单叹号(!):自定义类型
双叹号(!!):内置类型
内置类型
说明
!!int
整数类型
!!float
浮点数类型
!!bool
布尔类型
!!str
字符串类型
!!null
空值
!!set
集合
!!seq
列表
!!map
键值对
!!binary
二进制类型
!!timestamp
时间戳类型
!!omap/!!pairs
键值列表
纯量
纯量是最基本的不可在分割的值。
# 字符串
# 不使用引号
name: Tom
# 使用单引号
name: 'Tom'
# 使用双引号
name: "Tom"
---
# 布尔值
debug: true
debug: false
---
# 数字
12 # 十进制整数
014 # 八进制整数
0xC #十六进制整数
13.4 #浮点数
1.2e+34 #指数
.inf #无穷大
---
# Null 空值
date: ~
date: null
---
# 时间戳
# 使用iso-8601标准表示日期
date: 2018-01-01t16:59:43.10-05:00
特殊类型
# 文件块
# 注意“|”与文本之间须另起一行
# 使用|标注的文本内容缩进表示的块,可以保留块中已有的回车换行
value: |
hello
world!
# 输出结果
# hello 换行 world!
# +表示保留文字块末尾的换行
# -表示删除字符串末尾的换行
value: |
hello
value: |-
hello
value: |+
hello
# 输出结果
# hello\n hello hello\n\n
# 注意“>”与文本之间的空格
# 使用>标注的文本内容缩进表示的块,将块中回车替换为空格最终连接成一行
value: > hello
world!
# 输出结果
# hello 空格 world!
---
# 锚点和引用,kubernetes object 中 label 常用到
# 复制代码注意*引用部分不能追加内容
# 使用&定义数据锚点,即要复制的数据
# 使用*引用锚点数据,即数据的复制目的地
name: &a yaml
book: *a
books:
- java
- *a
- python
# 输出结果
book: yaml
books:[java, yaml, python]
最后更新于
这有帮助吗?