YAML 初学者简介

如果您是编写 API 的开发人员,即使您的主要序列化工具可能是 JSON,您也可能遇到过 YAML。

YAML 有自己的友好语法,是一种可以添加到您的开发工具库中的便捷语言。

让我们学习 YAML 的基础知识。

数据序列化

每当你想通过计算机网络(比如 Internet)发送一些数据结构或对象时,你必须将它转换成一种特殊格式才能读取和存储它。 这个过程通常被称为序列化,在网络上非常重要。 序列化的一个常见用法示例是从数据库读取数据并通过网络传输数据。

一些序列化格式包括 JSON、YAML、XML。

在这篇文章中,我们讨论了 YAML,在文章的最后,您将能够按照自己的方式学习 YAML,并且对 YAML 有一个清晰的介绍。

什么是 YAML,它对我有什么好处?

YAML 是一种数据序列化格式,代表 YAML 不是标记语言。

使用 YAML 的主要优点是可读性和可写性。 如果您有一个需要更易于人类阅读的配置文件,最好使用 YAML。 YAML 并不是 JSON 的完全替代品,因为 JSON 和 XML 也有它们的位置; 尽管如此,学习 YAML 还是很有用的。

YAML 的另一个好处是它支持各种数据类型,例如案例、数组、字典、列表和标量。 它对最流行的语言有很好的支持,如 JavaScript、Python、Ruby、Java 等。

YAML 只支持空格,并且区分大小写和空格。 制表符不被普遍接受。 YAML 文件的扩展名为 .yaml。

基本 YAML 语法

每个 YAML 都以 — 开头,表示 YAML 文件的开头。

创建 API 时,我们对 YAML 提供的称为映射的功能感兴趣。

  使用这 4 个 Cladogram Maker 生成公共树

以下示例显示了 YAML 中映射的示例。

---
name: James
boy: yes
GPA: 3.41

映射语法是key:value。 (注意空格,与 JSON 或 XML 不同,它在 YAML 中非常重要。

YAML 还支持字符、字符串、整数、浮点值等数据类型,以及由基本数据类型构造的数组、列表等集合。

YAML 中的数据类型

让我们看看下面的 YAML 示例:

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “BIGYAN”

AGE: 16

第一种数据类型是布尔值,它可以有两个值:true 或 false。 GPA 的值是浮点数。 YAML 还支持空数据类型,就像我们在“问题”中所使用的那样。 “Name”的值是一个字符串,需要用双引号或单引号括起来。 YAML 还支持多行字符串和多行字符串作为一个单一的可读性。

多行和单行字符串

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

> 符号允许您将单行字符串写入多行。 尽管我们有多行,但该句子实际上是单行描述。

如果我们使用 |,我们也可以有多个行字符串允许的符号:

About: |

 This is a multiline string

 And will be printed line wise.

列表

列表在 YAML 中非常重要。

下面给出了该列表的示例。

---

- apple

- banana

- mango

从标量到列表的映射如下所示,这对大多数配置文件来说非常重要。

---

Fruits:

 Apples

 Banana

 Guava 

将标量映射到列表需要嵌套。 我们也可以有多个嵌套列表,如下例所示。

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

在这里,汽车嵌套在汽车内部,现代汽车嵌套在汽车内部。 这是一个多重嵌套的例子。 我们可以根据需要进行多次嵌套。

Subjects:

     Engineering:

       Mechanical engineering:

         Design and manufacture

         Automobile

         Control and Design

       Civil engineering:

         Structural engineering

         Hydropower

       Arts:

         Medieval

         Modern

         Painting

YAML 还提供 & 和 * 符号作为锚点和对锚点的引用以避免重复。 它们在 Ruby on Rails 等框架的配置文件中必不可少,可以使 YAML 文件更小。

  什么是网络延迟以及如何改善它? [2022]

请参阅下面的示例

<span class="hljs-attr">details:</span> <span class="hljs-meta">&details</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">"John"
</span>    age: 18
profession: engineer

<< : * details

这相当于:

profession: engineer

name: "John"

age: 18

Python 中的 YAML

Python 支持 YAML,包括一些模块,如 ruamel 和 pyyaml。 首先安装pyyaml

pip 安装 pyyaml

对于本教程,创建一个名为 details.yaml 的文件

name: "john"

age:18

gender: male

使用以下内容创建另一个名为 feed.yaml 的文件:

sports:

 football
 basketball
 cricket
 baseball

---
countries:
 Brazil
 Lithuania
 Australia
 USA

让我们从阅读文件 details.yaml 开始

import yaml

with open('details.yaml') as f:
    
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

运行文件 details.py 后,我们得到以下输出

 $ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml

with open(r'feed.yaml') as file:
    # The FullLoader parameter handles the conversion from YAML
    # scalar values to Python the dictionary format
    fruits_list = yaml.load(file, Loader=yaml.FullLoader)

    print(fruits_list)

用 Python 将 YAML 写入文件

import yaml

dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]

with open(r'E:data.yaml', 'w') as file: #create a new yaml file 
    data = yaml.dump(dict_file, file)

Node.js 中的 YAML 实现

Node.js 是一种服务器端处理语言,数据序列化在开发过程中非常重要。

  如何(以及为什么!)为 WordPress 创建临时站点?

对于我们的教程,让我们考虑以下文件 example.yaml:

name:John

age:18

Hobbies:

 Hobby1:Football

 Hobby2:BasketBall

 Hobby3:Hockey

Job:

-System administrator

-Programmer

我们有一个可用于 Node.js 的 npm 库,称为 js-yaml. 让我们从安装模块开始

npm install js-yaml

然后我们在我们的文件中使用 js-yaml 模块。

const yaml = require('js-yaml'); //initialize js-yaml
const fs   = require('fs'); //initialize filestream

try {
  const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
  console.log(result);
} catch (e) {
  console.log(e); //catch exception
}

结论

在存储或分发数据的现代编程框架和应用程序中,YAML 在配置文件中变得越来越普遍。 YAML 的目标是许多与可扩展标记语言 (XML) 相同的通信应用程序,但它有一个有意与 XML 不同的最小语法。

可以使用写入数据和 YAML 特定装饰的打印命令为固定数据结构创建 YAML 文件。 但是,专用 YAML 发射器更适合转储各种或复杂的分层数据。 类似地,使用正则表达式,可以轻松解析基本的 YAML 文件(例如,键值对)。