YAML的简介(面向初学者)

关于YAML的简介(面向初学者)YAML(Yet Another Markup Language)是一种人类友好的数据序列化格式。它被设计用于以一种易于阅读和编写的方式表达数据。YAML语法简洁而直观。它使用空格缩进来表示层次结构,并使用冒号来分隔键值对。此外,YAML还支持列表、嵌套结构和注释等功能。YAML可以与多种编程语言集成,并广泛应用于配置文件、数据传输和数据持久化等领域。尽管YAML的主要目标是易读性,但它也具有一些高级功能,例如引用、锚点和多行字符串。总之,YAML是一种简单而强大的数据序列化格式,适用于各种应用场景。注意:本翻译保留了原文中的、和HTML标签。

如果您是一名编写API的开发人员,尽管您的主要序列化工具可能是JSON,但您可能已经遇到了YAML。

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

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

数据序列化

无论何时您想要发送一些数据结构或对象通过计算机网络,比如互联网,您都必须将其转换为一种特殊的格式以便读取和存储。这个过程通常被称为序列化,对于网络来说非常重要。序列化的常见用法示例是从数据库读取数据并在网络上传输。

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

在本文中,我们将讨论YAML,并在文章结束时,您将能够通过YAML工作并对YAML有一个清晰的介绍。

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

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

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

YAML的另一个好处是它支持各种数据类型,如cases、arrays、dictionaries、lists和scalars。它对于最流行的编程语言(如JavaScript,Python,Ruby,Java等)有很好的支持。

YAML只支持空格,它对大小写和空格也非常敏感。制表符在各个地方都不被接受。YAML文件的扩展名是.yaml

基本YAML语法

每个YAML文件都以---开始,表示YAML文件的开始。

creating an API的时候,我们对YAML提供的一种称为mapping的功能感兴趣。

以下示例显示了YAML中mapping的示例。

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

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

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

YAML中的数据类型

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

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “BIGYAN”

AGE: 16

第一个数据类型是布尔值,它可以有两个值:true或false。GPA的值是浮点数。YAML还支持null数据类型,就像我们对“Issues”一样。 “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 

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

汽车:

汽车:

现代

大众

福特

在这里,汽车嵌套在汽车中,现代汽车嵌套在汽车中。 这是多重嵌套的示例。我们可以有尽可能多的嵌套。

科目:

工程:

机械工程:

设计和制造

汽车

控制与设计

土木工程:

结构工程

水电

艺术:

中世纪

现代

绘画

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

看下面的例子

详情:&details
姓名:“约翰”
年龄:18

职业:工程师

<<:* details

等价于:

职业:工程师

姓名:“约翰”

年龄:18

Python中的YAML

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

pip install pyyaml

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

名称:“约翰”

年龄:18

性别:男

创建另一个名为feed.yaml的文件,其中包含以下内容:

运动:

足球
篮球
板球
棒球


国家:
巴西
立陶宛
澳大利亚
美国

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

导入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':男性}

导入yaml

with open(r'feed.yaml') as file:

FullLoader参数将YAML标量值转换为Python

#字典格式
fruits_list = yaml.load(file, Loader=yaml.FullLoader)

print(fruits_list)

用Python将YAML写入文件

导入yaml

dict_file = [{‘sports':[‘曲棍球','橄榄球','网球','乒乓球','足球','羽毛球']},
{‘countries':[‘牙买加','英格兰','尼泊尔','荷兰','南非','玻利维亚','葡萄牙']}]

with open(r'E: data.yaml','w') as file:#创建一个新的yaml文件
数据= yaml.dump(dict_file,file)

Node.js中的YAML实现

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

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

名称:约翰

年龄:18

爱好:

业余爱好1:足球

业余爱好2:篮球

业余爱好3:曲棍球

工作:

-系统管理员

-程序员

我们有一个可用于Node.js的名为js-yaml的npm库。 首先,通过以下方式安装模块

npm安装js-yaml

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

const yaml = require('js-yaml'); //初始化js-yaml

const fs = require('fs'); //初始化文件流

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

结论

在存储或分发数据的框架和应用程序中,YAML在配置文件中变得越来越常见。YAML的目标与可扩展标记语言(XML)一样,但其语法非常简洁,故意与XML不同。

可以使用打印命令创建用于固定数据结构的YAML文件,该命令将数据和YAML的特定装饰一起写入。然而,最好使用专用的YAML发射器来转储各种或复杂的分层数据。同样,通过正则表达式,基本的YAML文件(例如键值对)可以轻松解析。

类似文章