YAML 快速指南

简介: YAML 快速指南

YAML(“YAML Ain't Markup Language”的缩写) 是一种数据序列化格式,用于在不同系统和编程语言之间存储和交换数据。YAML 被设计为易于人类阅读,使其成为旨在供人们阅读的数据的不错选择。

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

什么是 YAML?

在 YAML 发展之初,它是作为“另一种标记语言”的缩写而得名的。后来,创作者决定将其改为“YAML Ain't Markup Language”,以区别于真正的标记语言并避免混淆。

该语言类似于 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)
—--
复制代码

易于阅读
 的语法 YAML 文件的语法使用类似于 Python 的缩进系统。您必须使用空格而不是制表符,以避免混淆。这样可以去除 JSON 和 XML 中的额外字符(引号、方括号和大括号)。结果,文件的可读性大大提高:

#YAML
 Imaro:
 author: Aldous Huxley
 language: English
 publication-year: 1932
 pages: 311
复制代码

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

#JSON 
{
   "Imaro": {
      "author": "Aldous Huxley",
      "language": "English",
      "publication-year": "1932",
      "pages": 311
   }
}
复制代码

缺少可执行文件 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
复制代码

显式和隐式类型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 
复制代码

YAML 语法

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

key1: value1
key2: value2
key3: value3
复制代码

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

str: Hello World
data: |
    This
    Separate
    Strings
data: >
    This
    one paragraph
    text
复制代码

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

key1: value1
key2:
  key3: value3
  key4: value4
复制代码

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

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

animals:
- dog
- cat
- elephant
复制代码

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

animals: [dog, cat, elephant]  
复制代码

标量和映射 标量是名称对应的单个值。YAML 支持标准类型:intand floatbooleanstringnull。它们可以用不同的方式表示:十六进制、八进制或指数。还有用于数学实体的特殊类型,例如 infinity、-infinity 和 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: ~
复制代码

YAML 还能做什么?

YAML 除了上述的特性外,还有:

  • 锚点

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

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

YAML 语法旨在简单易用,使其成为供人类阅读的数据的流行选择。通过使用缩进和键值对,YAML 能够表示范围广泛的数据类型。

YAML 的主要优点之一是它的可读性。YAML 旨在尽可能简洁,同时仍然易于理解。这使得它成为供人类读取的数据(例如配置文件)的不错选择。

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

结论

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

我希望这篇文章对您学习 YAML 及其功能有用!您在哪些领域使用过 YAML,为什么您认为它是一项值得学习的宝贵技能?在评论中分享您的想法


相关文章
|
11月前
|
Python
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
YAML+PyYAML笔记 7 | PyYAML源码之yaml.compose_all(),yaml.load(),yaml.load_all()
52 2
|
12月前
解析yaml文件(YamlPropertiesFactoryBean、YamlMapFactoryBean)
解析yaml文件(YamlPropertiesFactoryBean、YamlMapFactoryBean)
196 0
|
12月前
|
XML 存储 JSON
YAML教程:5分钟内开始使用YAML
YAML教程:5分钟内开始使用YAML
766 0
|
Kubernetes 大数据 容器
三、kubernetes 集群 YAML 文件详解
是一个可读性高,用来表大数据列的格式。Yaml的意思其实是:仍是一种标记语言,但是为了强调这种语言以数据为中心。而不是以标记语言为重点。
1050 0
三、kubernetes 集群 YAML 文件详解
|
XML JSON Kubernetes
|
Python
s.yaml
s.yaml
138 0
|
XML JSON 数据格式
yaml语法
yaml语法
|
JSON Kubernetes 监控
K8S之yaml 文件详解(pod、deployment、service)
K8S之yaml 文件详解(pod、deployment、service)
6593 1
K8S之yaml 文件详解(pod、deployment、service)
|
XML 存储 JSON
五分钟搞定 YAML
五分钟搞定 YAML
409 1
五分钟搞定 YAML
|
JSON Kubernetes 应用服务中间件
K8S集群-(YAML.YML)文件详解
K8S集群-(YAML.YML)文件详解
393 0
K8S集群-(YAML.YML)文件详解