yaml学习

前言

之前项目配置文件用 json 居多,爱不释手,后来接触了解过 yaml ,依然觉得没 json 好使,最近一年接触 docker 和 k8s,主流配置文件都基于 yaml,被逼无奈,回头整理一下 yaml,强烈推荐阮大神的 yaml 教程

yaml 是一种通用的数据串行化格式,支持的数据类型和 json 类似,字典,列表,纯量为主,上手较快,需要注意的一些语法规范如下:

1
2
3
4
1.大小写敏感
2.使用缩进表示层级关系
3.缩进时不允许使用Tab键,只允许使用空格
4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

他对单行字符串的缩进规范比较敏感

字典类型

在 json 里面字典类型存储格式是 key: value 对,json格式:{“name:”: “zhangsan”}

1
2
3
4
5
name: zhangsan

# yaml 也支持把多个键值对写到一行

hash: {name: zhangsan, age: 18}

列表

一组连词线开头的行,构成一个数组,json格式: [“cat”, “dog”, “pig”]

1
2
3
- cat
- dog
- pig

yaml 也支持多维数组,json格式: [[“cat”, “dog”, “pig”]]

1
2
3
4
5
6
7
-
- cat
- dog
- pig

# 数组也支持行内表示法
animal: [cat, dog, pig]

纯量

yaml 支持的数据类型也非常多,如

1
2
3
4
5
6
7
8
9
10
11
字符串
布尔值 # true false
整数
浮点数
Null # null 用 ~ 表示,如 parent: ~
时间 # 时间采用 ISO8601 格式,如 iso8601: 2001-12-14t21:59:43.10-05:00
日期 # 日期采用复合 iso8601 格式的年、月、日表示,如 date: 1976-07-31

# yaml还支持数据类型的强制转换,将这些类型强制转换为 str 类型
e: !!str 123
f: !!str true

复合结构

通常情况下我们碰到的 yaml 配置文件是非常复杂的,是多种数据结构的结合,其实也很简单,就像搭积木一样

1
2
3
4
5
peoples:
- {name: zhangsan,age: 18,workplace: guangzhou}
- name: liuyi
age: 20
workplace: shenzhen

字符串类型

补充说明一下 yaml 的字符串类型,因为他比较特殊,也很复杂

1.如果字符串中间有空格或者特殊字符,需要用单引号扩起来,如果单引号中间还有单引号需要用连续两个单引号来表示转义

1
name: 'xiaomin: 12'

2.字符串可以写成多行,第二行必须以空格开头,之前的换行符会被转换为空格符

1
2
name: bill
hu

补充说明

这里只是罗列了我们通常会碰到的一些使用场景,还可以看看阮大神的博客

坚持原创技术分享,您的支持将鼓励我继续创作!