YAML 快速入门

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

YAML 快速入门

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,包含两个成员;每个成员(dandora)是一个字典,多包含了 3 个键值对。实际开发中,嵌套序列通常用来表示复杂关系数据,也是一个好技巧。

总结

以上是关于 YAML 的基础知识的全部。感谢你的阅读。

访问官网(yaml.org)[4]可以看到更多支持的语法,还可以通过 yaml to json converter 工具[5]查看 yaml 到对应 json 的转换结果。

祝你学习愉快!

References

[1]

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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!