❝
原文链接:YAML tutorial: Get started in 5 minutes[1],2021.03.21,by Ryan Thelin.
❞

YAML 是一种数据序列化语言(data serialization language),允许你以紧凑且易读的格式存储复杂数据。对 DevOps 和虚拟化等场景下,构建高效的数据管理系统和自动化至关重要。
尽管开发人员经常忽视它,但 YAML 是一个强大而简单的工具,只需学习几个小时就能极大地改善你的职业前景。
今天,我们将通过实践教程帮助你快速学习 YAML,并探索如何在下一个数据驱动解决方案中使用它。
YAML 是什么?
YAML 是一种用于以人类可读形式存储信息的「数据序列化语言(data serialization language)」。它最初表示“Yet Another Markup Language”,后来改为“YAML Ain’t Markup Language”以区别于真正的标记语言。
它与 XML 和 JSON 文件格式类似,但使用更简约的语法,同时也包含相似的功能。YAML 通常用于在基础设施即代码(Infrastructure as Code (IoC))程序中创建配置文件,或者在 DevOps 开发流程中管理容器。
最近,YAML 已被用于创建执行文件内一系列命令的自动化协议,表示你的系统可以在不需要额外开发人员关注的情况下运行,更加独立和并能及时响应。
随着越来越多公司采用 DevOps 和虚拟化技术[2],对现代开发岗位而言,掌握 YAML 成为必备技能。YAML 通过支持像 Python(使用 PyYAML 库)、Docker 或 Ansible 等在内的流行技术,与现有技术整合也非常容易。
YAML vs JSON vs XML
YAML (.yml
):
-
人类可读的代码 -
极简主义语法 -
专为数据设计 -
与 JSON 具有相似的内联风格(是 JSON 的超集) -
支持注释 -
字符串无需引号包裹 -
被认为是更“清晰”的 JSON 格式 -
具备高级功能(可扩展数据类型、关系锚点和保留键顺序的映射类型)
「应用场景」:YAML 最适合于使用 DevOps 流水线或虚拟机(VMs)的数据密集型应用程序(data-heavy apps)。对于团队中经常处理配置数据的开发人员来说,因为易读,所以非常有帮助。
「JSON」 | 「XML」 | |
---|---|---|
「特性」 | – 相对更难阅读 – 明确、严格的语法要求 – 与 YAML 类似的内联风格(一些 YAML 解析器可以读取 JSON 文件) – 不支持注释 – 字符串需要使用双引号 |
– 相对更难阅读 – 冗长 – 是一门标记语言,而 YAML 只用于数据格式化 – 包含比 YAML 更多的功能,如标签属性 – 文档模式定义得很严格 |
「应用场景」 | JSON 在 Web 开发中备受青睐,因为它是最适合序列化的格式,也适合在 HTTP 连接上传输数据 | XML 最适合需要对验证、模式和命名空间进行精细控制的复杂项目。不太好读,同时需要更多的带宽和存储容量,但提供了无与伦比的控制能力 |
YAML 的显著特点
以下是 YAML 提供的一些最佳功能。
多文档支持
你可以在单个 YAML 文件中拥有多个 YAML 文档,以便更轻松地进行文件组织或数据解析。
每个文档之间的分隔由三条连字符(---
)标记。
---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
---
支持注释
YAML 允许你使用井号(#
)添加注释到文件中,类似于 Python 的注释。
key: #Here is a single-line comment
- value line 5
#Here is a
#multi-line comment
- value line 13
可读性强的语法
YAML 文件使用类似 Python 的缩进系统来展示程序的结构。为了避免混淆,你需要使用空格进行缩进,而不是制表符。
与 JSON 和 XML 文件中常见的引号、括号和大括号等“噪音(noise)”格式相比,YAML 文件减少了许多这些格式元素。
综合起来,这些格式规范使得 YAML 文件在可读性方面超越了 XML 和 JSON。
Imaro:
author: Charles R. Saunders
language: English
publication-year: 1981
pages: 224
YAML Example
{
"Imaro": {
"author": "Charles R. Saunders",
"language": "English",
"publication-year": "1981",
"pages": 224,
}
}
JSON Example
可以观察到,传达同样的信息被传达出来,YAML 表示的会更加简洁。文件中没有双引号、逗号和括号,也更加一目了然、更易阅读。
隐式和显式类型
YAML 在类型上提供了灵活性,它可以自动检测数据类型,并支持显式的类型选项。要将数据标记为特定的类型,只需在值之前加入 !![typeName]
即可。
# The value should be an int:
is-an-int: !!int 14.10
# Turn any value to a string:
is-a-str: !!str 67.43
# The next value should be a boolean:
is-a-bool: !!bool true
不包含可执行的命令
作为一种数据表示格式,YAML 不包含可执行文件。因此,与外部方交换 YAML 文件非常安全。
要添加可执行文件,必须将 YAML 与其他语言(如 Perl 或 Java[3])集成在一起。
YAML 语法
学习 YAML 的一些核心基本概念,差不多就能覆盖大部分的使用场景。
键值对
一般来说,YAML 文件中的大部分内容都是键值对(Key-value pairs)的形式,其中键表示名称,而值则表示与该名称相关联的数据。键值对是所有其他 YAML 结构的基础。
<key>: <value>
标量和映射
标量(Scalars)表示单个存储值。使用映射(Mapping)将标量分配给键名。你可以通过名称、冒号和空格(name:
)定义一个映射,然后为其赋予一个值。
YAML 支持常见类型,如:整数和浮点数值,以及非数字类型的布尔值和字符串。
每种类型都可以用不同的方式表示,比如十六进制、八进制或指数形式。还有一些特殊类型用于表示数学概念,如无穷大、负无穷大和非数字(NAN
)。
integer: 25
hex: 0x12d4 #evaluates to 4820
octal: 023332 #evaluates to 9946
float: 25.0
exponent: 12.3015e+05 #evaluates to 1230150.0
boolean: Yes
string: "25"
infinity: .inf # evaluates to infinity
neginf: -.Inf #evaluates to negative infinity
not: .NAN #Not a Number
字符串
字符串是由字符组成的集合,用于表示句子或短语。你可以使用“|
”将每个字符串作为新行打印,或使用“>
”将其打印成段落。
在 YAML 中,字符串不需要用双引号括起来。
str: Hello World
data: |
These
Newlines
Are broken up
data: >
This text is
wrapped and is a
single paragraph
序列
序列(Sequences)是类似于列表或数组的数据结构,可以在同一个键下保存多个值。它们使用块状或内联风格进行定义。
块状风格使用空格来组织文档。阅读起来更容易,但与流风格(flow style)相比不够紧凑。
---
# Shopping List Sequence in Block Style
shopping:
- milk
- eggs
- juice
流式风格允许你使用方括号在一行内编写序列,类似于 Python 或 JavaScript 等编程语言中声明数组。流式风格更紧凑,但一眼看上去会比较难阅读。
---
# Shopping List Sequence in Flow Style
shopping: [milk, eggs, juice]
字典
字典是一组嵌套在同一个子组下的键值对集合,有助于将数据根据逻辑划分供后续使用。
字典的定义方式类似于映射——需要输入字典名称,冒号和一个空格(dict:
),然后缩进并输入一个或多个键值对。
# An employee record
Employees:
- dan:
name: Dan D. Veloper
job: Developer
team: DevOps
- dora:
name: Dora D. Veloper
job: Project Manager
team: Web Subscriptions
我们定义了一个序列 Employees
,包含两个成员;每个成员(dan
、dora
)是一个字典,多包含了 3 个键值对。实际开发中,嵌套序列通常用来表示复杂关系数据,也是一个好技巧。
总结
以上是关于 YAML 的基础知识的全部。感谢你的阅读。
访问官网(yaml.org)[4]可以看到更多支持的语法,还可以通过 yaml to json converter 工具[5]查看 yaml 到对应 json 的转换结果。
祝你学习愉快!
References
YAML tutorial: Get started in 5 minutes: https://www.educative.io/blog/yaml-tutorial
[2]
虚拟化技术: https://www.educative.io/blog/operating-systems-crashcourse#advanced
[3]
Java: https://www.educative.io/blog/object-oriented-programming-concepts-java
[4]
访问官网(yaml.org): http://yaml.org/
[5]
yaml to json converter 工具: https://onlineyamltools.com/convert-yaml-to-json
原文始发于微信公众号(写代码的宝哥):YAML 快速入门
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/243875.html