五分钟学会 YAML!





5.00/5 (10投票s)
这篇速读文章将在您泡一杯茶的时间内教会您 YAML 标记语言的基础知识 :)
引言
如果你还没有接触过 YAML,请稍作停留,你很快就会遇到它了。我最近看到很多组织和项目都在采用它,因此值得了解一下。 YAML 是一种面向数据的人类可读的序列化语言,我在许多项目中都遇到过它,包括 OpenAPI、Docker、Kubernetes 和 Ansible playbook 等。
YAML 最初是“Yet Another Markup Language”(另一种标记语言)的缩写,但现在更常被称为“YAML Ain't Markup Language”(YAML 不是标记语言)(有点像 GNU is not unix!,或者 Bing! is not google!)。
下面的快照说明了我们将要介绍的一些基础知识。

YAML 元素
从上图可以看出,YAML 文件由许多不同的元素构成。 它们一起可以用来描述各种各样的结构。 我见过 YAML 用于描述从跨语言类、API 数据结构到虚拟机和容器的部署指令的所有内容。
YAML 元素主要基于键值对。 我们可以将它们视为严格的 KV
名称: 值
或者一个带有复杂/复合值的键
名称: < 键<br /> 另一个名称: 一些值 < 值
YAML 是 JSON 的超集,因此我们可以在构造中使用 JSON 风格的序列和映射
a_json_style_map: {"K": "V"}<br /> a_json_style_sequence: ["pink", "red", "red", "cat", 123, 234, 345]
空格/缩进
这是一个非常非常大的陷阱 - 它会坑你,所以一定要知道!......在 YAML 中,你用空格缩进,而不是制表符。此外,元素部分之间必须有空格。
例如,这是正确的
键: 值
但这样做会失败
键:值
^^ 冒号后面没有空格!
开始/结束文档
定义文档的开头和结尾是可选的。 要开始一个文档,请在文档顶部插入“---
”,要结束文档,请插入“...
”
注释
注释是通过在项目前面放置一个井号 '#
' 来定义的。 注释可以在一行的开头或一行的任何位置进行
# 这是一个注释<br /> 键: 值 #这是另一个注释
标量
简单的 KV 对属于此类别,以下是一些示例,它们非常多样化和灵活。
键: 值
一些数字: 299
带引号的文本: "一些文本描述"
更多带引号的文本: 字符串不必用引号引起来,但我更喜欢这样做=
布尔值: true
我们也可以在键中包含空格:以及在值中
空键值: null
集合 & 列表
列表和集合成员是在同一缩进级别开始的行,以破折号后跟一个空格开始。
# 一个豪华车的集合<br /> 豪华车<br /> - 保时捷<br /> - 阿斯顿·马丁<br /> - 宾利
多行集合
可以通过放置一个问号,后跟一个管道符号来标记复杂键的开始,从而容纳复杂键
? |<br /> 正在开始一个复杂<br /> 的键,包含许多<br /> 行<br /> : 并且这是值!
嵌套集合
您也可以有深度嵌套的集合
# 汽车信息<br /> - 驾驶员<br /> 姓名: Francis Black<br /> 年龄: 21<br /> 驾照类型:<br /> - 完整的汽车驾照<br /> - 赛车执照方程式V : 详情<br /> 执照 ID: ABC12345<br /> 过期日期: 2017-12-28
字典
字典包含键:值格式,内容缩进。
汽车详情:<br /> 制造商: 保时捷<br /> 型号: 911<br /> 燃料: 汽油
您可以像这样合并和混合列表和字典的集合
# 汽车信息<br /> - 驾驶员<br /> 姓名: Francis Black<br /> 年龄: 21<br /> 驾照类型:<br /> - 完整的汽车驾照<br /> - 赛车执照方程式V
总结
这就是最基本的内容,如果您需要更深入地挖掘,这里有一些有用的资源
YAML 规范
YAML 与 Ansible
YAML 与 Kubernetes
Docker Compose 文件和 YAML
YAML 维基百科
YAML 到 JSON 在线转换器实用程序
在线 YAML 解析器 (通过玩这个你可以学到很多!)
历史
版本 1 - 2017 年 12 月 28 日