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文件(例如键值对)可以轻松解析。