YAML 语法概述
学习 YAML 的基本语法。你还将了解如何在 YAML 中添加注释,以及如何创建包含多个文档的单个 YAML 文件或流。
在本章中,你将学习 YAML 的基本语法。
YAML 基础
YAML 用于存储列表或序列以及键值对或映射。
-
列表(也称为序列)是有序的元素集合。序列在块风格中使用连字符
-表示,在流风格中使用方括号[]表示;元素之间用换行(块风格)或逗号,(流风格)分隔。元素可以是任意类型,如字符串、数字或映射等。 -
键值对(也称为映射)是无序的键/值对集合。键是唯一的,但允许存在重复的值。映射中的每个元素之间用换行符后跟冒号
:分隔。
键值对
键值对是一种由键和值组成的数据结构。键用于标识值,而值可以是任何类型的数据。
键值对使用以下语法表示:
1<键>: <值>
其中 <键> 表示名称,<值> 表示数据,两者之间用 : (空格为必需)分隔。
键值对示例:
1key: value
以下是键值对的图形化表示:
列表
列表是一种由零个或多个有序项组成的简单数据结构。换句话说,列表是一个有序的数据集合。
列表通过在每一项前加上 -(连字符)来表示。
语法
1 - <元素 1> 2 - <元素 2> 3 - ... 4 - <元素 n>
以下是列表的图形化表示:
简单却强大
YAML 的简洁语法并不限制其语言能力。它足够丰富,能够以可读的纯文本文件形式表示几乎任何可想象的数据结构或运行程序中的对象。
以下是使 YAML 成为优秀数据格式选项的一些关键特性:
大小写敏感性
YAML 是大小写敏感的,因此键 "DATA" 与 "data" 是不同的。
列表中每一项都会被视为独立的项目,键值对也会因字母大小写不同而被视为唯一。
1- DATA 2- data 3- key: data 4- KEY: DATA
以下是上述代码示例中样本 YAML 数据的图形化表示:
YAML 结构由空格和缩进决定,类似于 Python 编程语言。仅使用空格进行缩进,不允许使用制表符(Tab)。
以下是本课程的学习目标列表:
下面的代码将上述列表表示为 YAML 格式:
1Learning Objectives: 2 - What is YAML? 3 - Basic Syntax 4 - Data Types 5 - Complex Data Types 6 - Advance Features 7 - Tools Leveraging YAML 8 - Parsers and Emitters
以下是表示本课程学习目标的 YAML 数据的图形化表示:
在基于 C 的编程语言中,这将被表示为如下代码片段:
1LearningObjectives[0] = "What is YAML?" 2LearningObjectives[1] = "Basic Syntax" 3LearningObjectives[2] = "Data Types" 4LearningObjectives[3] = "Complex Data Types" 5LearningObjectives[4] = "Advance Features" 6LearningObjectives[5] = "Tools Leveraging YAML" 7LearningObjectives[6] = "Parsers and Emitters"
从上面的例子可以看出,YAML 具有非常简单的数据格式。
提示:
编辑 YAML 文件时,请使用文本编辑器检查是否用空格代替了制表符。可以通过启用显示空白字符的功能来完成此检查。
YAML 中的多文档支持
定义 YAML 文件时,通常使用 .yml 或 .yaml 扩展名,例如 config.yml。不过,某些工具可能使用其他扩展名来标明文件用途。
查看下面的代码片段,了解如何在一个文件或流中创建多个文档。
1--- 2 - XML 3 - JSON 4 - CSV 5--- 6 - Unicode 7 - ASCII 8 - UTF8 9...
以下是该格式的图形化表示:
- YAML 流是由零个或多个文档组成的集合。
- 空流不包含任何文档。
- 单个文档可以标记也可以不标记
---。 - 可以在一个 YAML 文件中添加多个文档。
- 不同文档之间使用三个连字符
---分隔。 - 文档可以用三个点
...结束。 - 三个点
...用于标记文档结束,而不开启新文档。
块风格
块风格的文档使用空格来组织结构。这种风格更易于阅读,但占用空间更多。
示例
1color: 2 - red 3 - yellow 4 - blue
以下是该数据的图形化表示:
流风格
YAML 提供了一种替代语法,称为流风格,它允许将序列和映射以内联方式书写,无需依赖缩进,分别使用方括号 [] 和花括号 {}。
流风格是 JSON 的扩展。虽然不如块风格易读,但能提供更高的紧凑性。
示例
1color: [red, blue]
以及
1 - { name: 'James', age: 35 }
注释
任何位于 # 后面且未被单引号 '' 或双引号 "" 包裹的文本都被视为注释。# 标记注释的开始,直到行尾的所有内容都会被忽略。你可以用它来添加文件说明或临时禁用部分代码。
以下是一些注释示例:
示例
1## 一行注释
注释可以在行中的任意位置开始。
示例
1## 文档从下方开始 2--- 3key: "value" # 映射 4 # 包含两个项目的列表 5list: 6 - "item 1" # 第一个值 7 - "item 2" # 第二个值 8--- 9## 文档结束
提示:
YAML 不支持块注释或多行注释。
若要创建多行注释,需在每行开头添加 # 字符。
示例
1## 这是一个多行 2## YAML 注释。没有其他方式 3## 可以创建块注释。
以下是另一个 YAML 注释示例:
1# __ __ __ __ _ 2# \ \ / / /\ | \/ || | 3# \ \_/ / / \ | \ / || | 4# \ / / /\ \ | |\/| || | 5# | | / ____ \ | | | || |____ 6# |_|/_/ \_\|_| |_||______|
总结
- YAML 中列表的项通过在前面加上
-(连字符)表示。 - YAML 中的键值对表示为
<键>:<值>。 - YAML 是大小写敏感的。
- YAML 使用空格和缩进来定义文档结构。
- 定义 YAML 文件时,使用
.yml或.yaml作为文件扩展名。 - YAML 中的不同文档可通过三个连字符
---分隔。 - 使用三个点
...标记文档结束,而不开启新文档。 - 块风格文档使用空格来组织文档结构。
- 流风格使 YAML 成为 JSON 的扩展。流风格比块风格略难阅读,但能提供更高的紧凑性。
- 位于
#后面且未被''或""包裹的任何文本均被视为注释。 - YAML 不支持块注释或多行注释。
Quiz
YAML 不支持注释。