3-yaml

第三章 YAML语言

1 简介

YAML是一种可读性好,用于表达数据序列化的语言。YAML的全名为YAML Ain't Markup Language。YAML常被用于应用程序的配置文件或者程序之间的数据交换。

从使用目的来看,YAML与XMLJSON十分相似,它们都独立于编程语言和平台。但是,YAML有诸多独特的优势。

  1. YAML比XML、JSON更加简洁。YAML使用空白符缩进的方式来表示数据结构,因此,YAML并没有定义或者使用额外的分隔符。因此,程序处理YAML的速度更快。
  2. YAML使用缩进来表达数据结构,这种方式更接近于人们撰写文档的方式。因此,YAML格式的文档更容易理解,学习YAML更容易。
  3. 从语法结构上来看,YAML是JSON格式的超集(Super Set)。换句话说,YAML编译器能处理YAML和JSON格式的数据。因此,处理YAML数据格式的程序能够较容易兼容JSON数据格式。

小水滴还提供了在线YAML校验和格式化工具,欢迎使用。

2 基础知识

YAML是使用空格符来表示缩进的。在YAML文档中,不能使用Tab键(制表符)表示缩进。每一级缩进并没有空格数目的要求,只需要同级的内容使用相同数目的空格即可。

YAML文档由对象(Object)数组(Array)标量(Scalar)三种数据结构组成。对象是一组键值对(Key/Value Pairs),类似于编程语言中的映射(Map)、哈希(Hash)或者字典(Dictionary)的概念。数组则是一组有序的值。而标量则是最小的、不可再分割的值。

2.1 对象

对象是一组键值对,键与值由冒号分隔。例如:下面的例子展示的是一个简单的键值对,键的名称为name,值为littlewaterdrop。

name: littlewaterdrop

一般的,一个键值对单独放在一行中。在同一级别下的多个键值对需保持相同的缩进。YAML也支持多个键值对放在同一行,她们以逗号分隔。例如下面的两个例子是等效的。

course: 
  name: yaml语言
  description: 介绍yaml语言的一门入门课。
course: 
  name: yaml语言, description: 介绍yaml语言的一门入门课。

在上例中,键的名称是course,值是一个对象,包含两个键值对。我们也可以把她们全部放在一行。因为course对应的值是一个对象,该对象需要放在{(左花括号)和}(右花括号)之中,以表示这个值是一个对象。

course: {name: yaml语言, description: 介绍yaml语言的一门入门课。}

2.2 数组

在表示数组时,需要在每个元素之前使用连字符(-)。例如:

animals:
  - Cat
  - Dog
  - Bird

YAML也支持将键和值(数组)放在同一行。例如:下面的例子与上面的例子是等效的。数组的元素是放在[(左方括号)和](右方括号)之中的。

animals: [Cat, Dog, Bird]

2.3 标量

标量是YAML文档中的最小单元,不可再分。YAML的标量支持字符串布尔值整数浮点数null日期时间。其中,null用~表示。例如:下面的例子展示了各种类型标量的使用方法。

name: littlewaterdrop
integer: 10
number: 10.50
isValid: true
nullValue: ~
TimeInISOFormat: 2020-07-03t12:57:00.09-06:00
today: 2020-07-03

从上面的例子可以发现,YAML会自动检测值的类型。例如,在上例中,10会被自动地认为是一个整数。如果我们需要使用字符串"10"的话,可以将其放在单引号中。或者使用双惊叹号做强制类型转换。当使用单引号字符串,并且字符串的内容包含单引号时,可使用两个单引号作为单引号的转义字符(Escaped Character)。

tenInString: '10'
castToString: !!str 10
escapedSingleQuote: 'Adam''s book'

2.4 注释

YAML支持单行注释。由#开始的一行会被YAML解释器忽略。YAML尚不支持多行注释。多行注释需以多个单行注释的形式出现。

# This is a single-line comment.
# This is a 
# multi-line 
# comment.

2.4 一个完整的例子

最后,我们给出一个完整的YAML语言的例子,帮助读者理解YAML的使用方法。

name: An YAML Demo
version: '1.0'
metadata:
  author: Little Waterdrop 
  time: 2020-07-10
projects:
  - name: module A
    dependency: [dep-1, dep-2, dep-3]
    build: succeeded
  - name: module B
    dependency: 
     - dep-4
     - dep-5
    build: failed

3 结语

本章介绍了YAML的基础知识。因为YAML使用缩进表示文档结构,YAML文档非常轻便、易读、通用性好和扩展性好,因此,她被广泛的应用于系统配置和数据交换等应用场景。

上一章
下一章

注册用户登陆后可留言

Copyright  2019 Little Waterdrop, LLC. All Rights Reserved.