什么是YAML?它如何与示例一起使用

大多数格式化语言以非人类可读的格式显示数据。即使是最流行的数据格式 JSON,其代码可读性也很差。YAML 是 JSON 的替代方案,它以自然、易于阅读和简洁的方式格式化数据。本文将向您介绍 YAML 标记语言。我们介绍了这种标记语言背后的基本概念,解释了它的主要特性,并展示了 YAML提供了什么。

什么是 YAML?

YAML 是一种数据序列化语言。早在 2001 年问世时,YAML 就代表“又一种标记语言”。该首字母缩写词后来更改为“ YAML Ain't Markup Language ”,以强调该语言旨在用于数据而不是文档。

它不是真正意义上的编程语言。YAML 文件存储信息,因此它们不包括操作和决策。

与 XML 或 JSON 不同,YAML 以一种易于人类阅读的方式呈现数据。简单的语法不会影响语言的功能。添加到 XML 或 JSON 文件的任何数据或结构也可以存储在 YAML 中。

除了人类可读的代码外,YAML 还具有以下特点:

  • 跨语言数据可移植性
  • 一致的数据模型
  • 一次性处理
  • 易于实施和使用

用户可以用任何编程语言编写代码来读取和生成 YAML。YAML 中的扩展名是.yaml.yml。两个扩展名代表相同的文件类型。

Yaml 功能

YAML 具有多项功能,使其成为数据格式化的绝佳选择。

多文档支持

用户可以将多个文档添加到单个 YAML 文件中。用三个破折号 ( ) 分隔不同的文档---,如下所示:

  1. ---
  2.  
  3. 时间:19:04:12
  4.  
  5. 玩家:playerOne
  6.  
  7. 行动:罢工(小姐)
  8.  
  9. ---
  10.  
  11. 时间:20:03:47
  12.  
  13. 玩家:playerTwo
  14.  
  15. 动作:打击(击中)
  16.  
  17. ...

三个点(“ …… ”)标记文档的结尾,而不是开始一个新的。

内置评论

YAML 允许用户在他们的代码中添加注释。YAML 注释以# 符号开头,不必位于单独的行:

  1. key: #这是单行注释
  2.  
  3.    - 价值线 10
  4.  
  5.    #这是一个
  6.  
  7.    #多行注释
  8.  
  9.    - 价值线 20

干净的语法

与 Python 一样,YAML 依赖缩进来显示数据中的级别和结构。没有常用的格式符号,例如大括号、方括号、结束标记或引号。语法简洁且易于浏览。

简洁的语法是一些流行工具依赖 YAML 的原因,例如Ansible、Kubernetes 和 OpenStack。

没有标签

YAML 不允许制表符。空格是实现缩进的唯一方法。

最好在文本编辑器中显示空白字符,以防止意外使用制表符。

精准反馈

YAML 反馈是指文件中的特定行。当您知道在哪里查找时,您可以快速找到并修复错误。

支持复杂结构

YAML 提供了引用其他数据对象的能力。通过引用,您可以在 YAML 文件中编写递归数据并构建高级数据结构。

带有标签的显式数据类型

YAML 自动检测数据类型,但用户可以自由指定他们需要的类型。要指定数据类型,请包含“!!” 象征:

  1. # 值应该是一个整数:
  2.  
  3. is-an-int: !!int 5.6
  4.  
  5. # 将任意值转换为字符串:
  6.  
  7. is-a-str: !!str 90.88
  8.  
  9. # 下一个值应该是一个布尔值:
  10.  
  11. is-a-bool: !!bool 是的

没有可执行的命令

YAML 是一种数据表示格式。没有可执行命令,这使得该语言在与第三方交换文件时非常安全。

如果用户希望添加可执行命令,YAML 必须与其他语言集成。例如,添加 Perl 解析器以启用 Perl 代码执行。

YAML 的工作原理

YAML 匹配敏捷方法的原生数据结构及其语言,例如 Perl、Python、PHP、Ruby 和 JavaScript。它还派生了其他语言的功能:

  • 标量、列表和数组来自 Perl。
  • 三破折号分隔符来自 MIME。
  • 空格包装来自 HTML。
  • 转义序列来自 C.

YAML 支持所有基本数据类型,包括空值、数字、字符串、数组和映射。它识别一些特定于语言的数据类型,例如日期、时间戳和特殊数值。

冒号和一个空格定义一个标量(或变量):

  1. 字符串:“17
  2.  
  3. 整数:17
  4.  
  5. 浮动:17.0
  6.  
  7. 布尔值:否

|字符表示保留换行符的字符串,字符> 表示折叠换行符的字符串:

  1. 数据:|
  2.  
  3.    每个人
  4.  
  5.    这些
  6.  
  7.    换行符
  8.  
  9.    将会
  10.  
  11.    破碎。
  12.  
  13. 数据:>
  14.  
  15.    本文
  16.  
  17.    被包裹
  18.  
  19.    还会
  20.  
  21.    形成
  22.  
  23.    一个段落。

除了基础知识之外,您还需要了解 YAML 中两种重要的结构类型:

  • YAML 列表
  • YAML 映射

在 YAML 中使用这两种结构进行格式化。

YAML 映射(带示例)

地图关联名称-值对,这是设置数据的一个重要方面。YAML 配置文件可以这样开始:

  1. ---
  2.  
  3. api版本:v3
  4.  
  5. 种类:豆荚

这是相同文件打开的 JSON 等价物:

  1. {
  2.  
  3.    "apiVersion": "v3",
  4.  
  5.    “种类”:“豆荚”
  6.  
  7. }

两个代码都有两个值,v3Pod,映射到两个键,apiVersion 和kind。在 YAML 中,引号是可选的,并且没有括号。

这种标记语言允许您通过创建映射到另一个映射而不是字符串的键来指定更复杂的结构。请参阅下面的 YAML 示例:

  1. ---
  2.  
  3. api版本:v3
  4.  
  5. 种类:豆荚
  6.  
  7. 元数据:
  8.  
  9.   名称:RSS网站
  10.  
  11.   标签:
  12.  
  13.     应用程序:网络

我们有一个键 ( metadata) 和另外两个键作为它的值name labels。该labels 键具有另一个映射作为其值。YAML 允许您根据需要嵌套地图。

空格的数量无关紧要,但它必须在整个文件中保持一致。在我们的示例中,为了便于阅读,我们使用了两个空格。Name并且labels具有相同的缩进级别,因此处理器知道两者都是同一映射的一部分。

相同的映射在 JSON 中如下所示:

  1. {
  2.  
  3.   "apiVersion": "v3",
  4.  
  5.   “种类”:“豆荚”,
  6.  
  7.   “元数据”:{
  8.  
  9.                “名称”:“RSS站点”,
  10.  
  11.                “标签”: {
  12.  
  13.                           “应用程序”:“网络”
  14.  
  15.                          }
  16.               }
  17. }

YAML 列表(附示例)

YAML 列表是一系列项目。例如:

  1. 参数:
  2.  
  3.   - 关掉
  4.  
  5.   - 1000
  6.  
  7.   - 味精
  8.  
  9.   - “重启系统”

一个列表可以包含任意数量的项目。项目以破折号开头,而缩进将其与父项分开。您还可以将地图存储在列表中:

  1. ---
  2.  
  3. api版本:v3
  4.  
  5. 种类:豆荚
  6.  
  7. 元数据:
  8.  
  9.   名称:RSS网站
  10.  
  11.   标签:
  12.  
  13.     应用程序:网络
  14.  
  15. 规格:
  16.  
  17.   容器:
  18.  
  19.     - 名称:前端
  20.  
  21.       图片:nginx
  22.  
  23.       端口:
  24.  
  25.         - 容器端口:80
  26.  
  27.     - 名称:RSS阅读器
  28.  
  29.       图片:nickchase/rss-php-nginx:v1
  30.  
  31.       端口:
  32.  
  33.         - 容器端口:88

我们有一个容器(对象)列表。每个都由名称、图像和端口列表组成。ports 下的每一项都是一个映射,列出了containerPort 及其值。

我们的示例在 JSON 中看起来像这样:

  1. { apiVersion”: v3”, kind”: Pod”, “元数据”: { name”: rss-site”, labels”: { app”: web } }, spec : { containers”: [{ name”: front-end”, image”: nginx”, ports”: [{ containerPort”: 80 }] }, { name”: rss -reader”、“image”:“nickchase/rss-php-nginx:v1”、“ports”:[{“containerPort”:“88”}] }] } }

YAML 和 JSON 有什么区别?

JSON 和 YAML 可以互换使用,它们的用途相同。但是,两者之间存在显着差异:

YAML JSON
易于人类阅读 人类难以阅读
允许评论 暂无评论
空格字符决定层次结构 方括号和大括号表示数组和对象
字符串引号支持单引号和双引号 字符串必须用双引号
根节点可以是任何有效的数据类型 根节点是一个对象或一个数组

YAML 和 JSON 的主要区别在于代码的可读性。最好的例子是官方 YAML 主页。该网站本身是有效的 YAML,但人类很容易阅读。

YAML 是 JSON 的超集。如果将 JSON 直接粘贴到 YAML 文件中,它会通过 YAML 解析器解析相同的内容。用户还可以在两种格式之间转换大多数文档。可以在线将 JSON 文件转换为 YAML,也可以使用Syck 或 XS 等工具。

IaC 中的 YAML

YAML 是为Infrastructure as Code编写配置文件时的常用选项。这些文件存储所需云环境的参数和设置。

Red Hat 的 Ansible 是最受欢迎的 IaC 工具之一,它使用 YAML 进行文件管理。Ansible 用户创建所谓的用 YAML 代码编写的剧本,这些剧本可以自动执行配置和部署云环境的手动任务。

在下面的示例中,我们定义了一个 Ansible 剧本verify-apache.yml

  1. ---
  2.  
  3. - 主机:网络服务器
  4.  
  5. 变量:
  6.     http_port90
  7.     最大客户数:250
  8.  
  9.   远程用户:根
  10.  
  11.   任务:
  12.   - 名称:确保 apache 是最新版本
  13.     百胜:
  14.       名称:httpd
  15.       状态:最新
  16.   - 名称:编写 apache 配置文件
  17.     模板:
  18.       源代码:/srv/httpd.j2
  19.       目标:/etc/httpd.conf
  20.     通知:
  21.     - 重启阿帕奇
  22.   - 名称:确保 apache 正在运行
  23.  
  24.     服务:
  25.       名称:httpd
  26.       状态:开始
  27.  
  28.   处理程序:
  29.     - 名称:重启apache
  30.       服务:
  31.         名称:httpd
  32.         状态:重启

此 YAML 剧本中有三个任务:

  • yum 我们使用该命令将 Apache 更新到最新版本。
  • 我们使用模板来复制 Apache 配置文件。然后 playbook 重新启动 Apache 服务。
  • 我们启动 Apache 服务。

设置后,将从命令行运行剧本。虽然路径因设置而异,但以下命令运行 playbook:

  1. ansible-playbook -i 主机/组 verify_apache.yml

文章链接: https://www.mfisp.com/5109.html

文章标题:什么是YAML?它如何与示例一起使用

文章版权:梦飞科技所发布的内容,部分为原创文章,转载请注明来源,网络转载文章如有侵权请联系我们!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

点点赞赏,手留余香

给TA打赏
共0人
还没有人赞赏,快来当第一个赞赏的人吧!
    IDC云库

    SQL Server 有多少内存是正常的

    2022-3-30 15:52:04

    IDC云库

    基础架构即代码的好处

    2022-3-31 10:24:49

    0 条回复 A文章作者 M管理员
    如果喜欢,请评论一下~
    欢迎您,新朋友,感谢参与互动!
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    私信列表
    搜索

    梦飞科技 - 最新云主机促销服务器租用优惠

    可以介绍下你们的服务器产品么

    云服务器你们是怎么收费的呢

    租用vps现在有优惠活动吗