YAML 快速指南

2025-05-25

YAML 快速指南

YAML(“YAML 不是标记语言”的缩写)是一种数据序列化格式,用于在不同系统和编程语言之间存储和交换数据。YAML 的设计初衷是易于人类阅读,因此对于旨在供人类阅读的数据而言,它是一种不错的选择。

在这篇文章中,我想了解 YAML 的基本特性以及它在 DevOps 工具中被广泛使用的原因。

什么是 YAML?


YAML 在开发之初,是“另一种标记语言”的缩写。后来,创建者决定将其更改为“YAML 不是标记语言”,以将其与真正的标记语言区分开来并避免混淆。

该语言类似于 XML 和 JSON,但使用更简洁的语法,同时保持了类似的功能。YAML 通常用于在基础设施即代码 (IAC) 程序中创建配置文件,或在 DevOps 工作中管理容器。

在大多数情况下,YAML 用于创建自动化协议,这些协议可以执行 YAML 文件中编写的一系列命令。这使得您的系统更加独立、响应更快,无需开发人员的额外关注。

越来越多的公司正在使用 DevOps 和虚拟化,因此 YAML 已成为现代开发人员的必备工具。此外,YAML 易于集成 Python(使用 PyYAML 库、Docker 或 Ansible)以及其他流行技术。

现在让我们看看 YAML、JSON 和 XML 之间的主要区别是什么。

YAML、JSON 和 XML

首先,我将列出 YAML 语言的一些基本特性,我认为这些特性使它有别于其他语言:

  • 简约的语法;
  • 人类可读的代码;
  • 跨语言兼容性;
  • 内联样式类似于 JSON(YAML 是其超集)并且被认为比 JSON 更“干净”;
  • 为处理数据而精益求精;
  • 支持评论;
  • 支持不带引号的字符串。

作为附加功能,我提到了可扩展数据类型、相对锚点和保留键顺序的类型映射。

YAML 非常适合使用 DevOps 流水线或虚拟机的数据密集型应用程序。此外,对于开发人员频繁交互的团队来说,提高数据可读性也大有裨益。

与 YAML 相比,XML 可以用以下方式描述:

  • 更加罗嗦;

  • 更难阅读;
  • 充当标记语言,YAML 充当数据格式化语言;

  • 比 YAML 具有更多功能,例如标签属性;

  • 更严格的文档模式。


总体而言,XML 非常适合需要精细控制验证、模式和命名空间的复杂项目。该语言可读性较差,需要更多带宽和存储容量,但提供了前所未有的控制力。

至于JSON,与YAML相比,它的特点是:

  • 明确、严格的语法要求;

  • 更难阅读;

  • 类似 YAML 的内联样式(一些 YAML 解析器可以读取 JSON 文件);

  • 尚未有任何评论;
  • 字符串需要双引号。


JSON 通常用于 Web 开发,它是序列化和通过 HTTP 连接传递数据的最佳格式。

在我们了解了上述三种语言之间的差异之后,我想指出 YAML 的一些最显著的特性,许多开发人员都喜欢这些特性。

YAML 的独特功能

多文档支持
您可以将多个 YAML 文档合并为一个 YAML 文件,以便更轻松地组织文件和解析数据。

文档之间用三个破折号 (---) 分隔:

---
player: playerOne
action: attack (miss)
---
player: playerTwo
action: attack (hit)
—--
Enter fullscreen mode Exit fullscreen mode

易于阅读的语法
 YAML 文件的语法使用与 Python 类似的缩进系统。为了避免混淆,必须使用空格而不是制表符。这消除了 JSON 和 XML 中的多余字符(引号、方括号和花括号)。因此,文件的可读性大大提升:

#YAML
 Imaro:
 author: Aldous Huxley
 language: English
 publication-year: 1932
 pages: 311
Enter fullscreen mode Exit fullscreen mode

现在将其与 JSON 格式进行比较:

#JSON 
{
   "Imaro": {
      "author": "Aldous Huxley",
      "language": "English",
      "publication-year": "1932",
      "pages": 311
   }
}
Enter fullscreen mode Exit fullscreen mode

缺少可执行文件
YAML 不包含可执行文件。因此,与第三方交换 YAML 文件是安全的。要使用可执行文件,YAML 需要与其他语言(例如 Perl 或 Java)集成。

注释支持YAML 允许您在字符后添加注释#,就像在 Python 中一样:

key: #This is a single line comment
    - value line 2
    #This is
    #a multiline comment
  - value line 21
Enter fullscreen mode Exit fullscreen mode

显式和隐式类型YAML 既提供自动类型检测,也提供显式指定数据类型的功能。要使用具体类型,请!![typeName]在值前写入。

# This value has been converted to an int:
14.10 is-an-int: !!int
# Converts any value to a string:
67.43 is-a-str: !!str
# Must be a boolean value:
is-a-bool: !!yes bool 
Enter fullscreen mode Exit fullscreen mode

YAML 语法

键值对YAML 使用键值对来表示数据,类似于 Python 中的字典。例如:

key1: value1
key2: value2
key3: value3
Enter fullscreen mode Exit fullscreen mode

字符串 字符串 
是字符的集合,可以包含一个单词或一个句子。您可以将其用于|单行或>段落。YAML 中不需要引号。

str: Hello World
data: |
    This
    Separate
    Strings
data: >
    This
    one paragraph
    text
Enter fullscreen mode Exit fullscreen mode

字典YAML 支持字典,可以使用键值对来表示。字典允许您将数据划分为逻辑类别。例如:

key1: value1
key2:
  key3: value3
  key4: value4
Enter fullscreen mode Exit fullscreen mode

字典可以包含更复杂的结构,允许您存储复杂的关系数据。

序列序列是类似于列表或数组的数据结构,在同一个键下存储多个值。它们使用缩进或 来定义[]

animals:
- dog
- cat
- elephant
Enter fullscreen mode Exit fullscreen mode

单行序列看起来更简洁但可读性较差。

animals: [dog, cat, elephant]  
Enter fullscreen mode Exit fullscreen mode

标量和映射
标量是与名称对应的单个值。YAML 支持标准类型:intfloatbooleanstringnull。它们可以用不同的方式表示:十六进制、八进制或指数。此外,还提供了用于数学实体的特殊类型,例如无穷大、负无穷大和 NAN。

integer: 25
hex: 0x12d4 #equal to 4820
octal: 023332 #equal to 9946
float: 25.0
exponent: 12.3015e+05 #equal to 1230150.0
boolean: Yes
string: "25"
infinity: .inf # converts to infinity
neginf: -.Inf #converts to minus infinity
not: .NAN #Not a Number
null: ~
Enter fullscreen mode Exit fullscreen mode

YAML 还能做什么?

除了上面描述的特性之外,YAML还具有:

  • 锚点

  • 模板
  • 
与 Docker、Ansible 等交互。

  • 扩展序列和映射
  • 
扩展数据类型(时间戳、空值等)

YAML 语法设计简洁易用,使其成为处理人类可读数据的热门选择。通过使用缩进和键值对,YAML 能够表示各种数据类型。

YAML 的主要优势之一是其可读性。YAML 的设计理念是尽可能简洁,同时又易于理解。这使得它成为用于存储人类可读数据(例如配置文件)的理想选择。

YAML 的另一个好处是它与许多流行的 DevOps 工具(例如 Ansible、Docker 和 Kubernetes)集成。这些工具使用 YAML 定义配置文件,这对于在这些领域工作的任何人来说都是一项宝贵的技能。

结论

总而言之,YAML 是一种人类可读的数据序列化格式,用于在不同系统和编程语言之间存储和交换数据。它在 DevOps 工具中被广泛使用,并因其简单性、可读性和灵活性而受到重视。

希望这篇文章能帮助您学习 YAML 及其功能!您在哪些领域使用过 YAML?为什么您认为它是一项值得学习的技能?欢迎在评论区分享您的想法!

PS:如果您喜欢我的帖子并愿意支持我,我会在这里留下一些链接:)

通过Coinbase支持我

在 ko-fi.com 给我买杯咖啡

文章来源:https://dev.to/mariamarsh/quick-guide-for-yaml-2i1a
PREV
2022 年的代码有什么问题?🤷🏻‍♀️
NEXT
面向开发人员的 10 个最佳 GitHub 存储库