本文概述
前言
本YAML教程为你介绍YAML的基本用法,包括数据类型、基本语法、使用示例等。
YAML一般用于编写配置文件,例如Spring Boot中的application.yml文件。至于哪个更简单,看个人的习惯,有人说YAML语法比JSON简单,但是如果习惯了JSON配置,反而使用JSON会简单很多,因为习惯了,而另外学一个配置文件,反而增加学习成本。而且YAML语法采用缩进的方式,本人觉得这并不好,如果层级太多,配置看起来很乱,而且容易出错。
不管怎么说,开发就是这样,还是要不断学新内容的。还好的是,YAML的内容比较少,学起来也不难,大概一天就能学完并且能使用了。本文介绍YAML使用的完整语法,只要你有一些数据结构的经验,那么结合例子理解并不难,主要的数据结构例如数组、对象、键值对(字典或哈希表)。
YAML完整的文件格式可参考官方说明:https://yaml.org/spec/1.2/spec.html。
YAML DEMO和YAML JavaScript转换器可以使用:http://nodeca.github.io/js-yaml/。
YAML语法规范
YAML语法规则如下:
- 大小写敏感。
- 使用缩进表示层级关系,但缩进不允许使用Tab,只允许使用空格,缩进的空格数不限,只要保持相同层级的元素左对齐即可。
- 使用#添加注释。
YAML支持三种数据结构:
- 对象(object):或键值对(key-value),又称为哈希表或字典,单行可以用{}括起来一个对象。
- 数组(array):列表或序列,单行语法可以使用[]括起来一个数组。
- 纯量(scalars):简单数据类型,例如整型、浮点型、字符串等。
下面我们介绍这些数据结构的使用语法和例子。
YAML对象(Object)
简单对象使用键值的方式,例如key: value,下面是常见的例子:
name: 'Jobs'
user:
name: 'Jobs'
age: 23
height: 1.8
YAML也支持行内的写法,对象的值使用{}括起来,其中的属性使用逗号分隔:
obj: {name: 'Jobs', age: 90, height: 23}
复杂键值对象的键使用一个问号?加一个空格,值使用一个冒号:加一个空格,例如以下复杂键值对象:
?
- name
- email
:
- 'Jobs'
- '123@qq.com'
YAML数组
以连词线-开头的行表示数组,在同一个层级连续的-行同属一个数组。
- A
- 12
- B
- 12.36
- true
数组行内语法使用[]将数组元素括起来,例如:
array: [12, 78, 23, 90, 34]
YAML支持多维数组,例如:
-
- A
- 12
- B
- 12.36
- true
- [12, 78, 23, 90, 34]
YAML复合结构
YAML的数组和对象可以形成复合结构:
- 对象的值是一维数组。
- 对象的值是多维数组。
- 对象的值是复杂对象
- 数组的值是简单对象。
- 数组的值是复杂对象。
- 数组的值是数组(多维数组)。
- 对象的键和值可以是数组(在上面已有介绍)。
例如下面的例子:
?
- a
- b
:
pt:
a: 33
b: 22
name: 'obj'
names: [a, b, c]
nameo:
a: 12
b: 34
c: 67
array:
a: a
b: b
c: c
d:
a: 1
b: 2
对象的值为复杂对象的例子如下:
orders:
-
name: 'aaa'
price: 90
number: 23
-
name: 'bbb'
price: 10
number: 100
YAML纯量
在本YAML教程中要指出的是,YAML存量是最常用的数据类型,YAML的纯量(基本数据类型)包括:
- 字符串:默认可以不使用引号,若包含空格和特殊字符则使用单引号或双引号;单引号之中如果还有单引号,则使用两个单引号转义;可写成多行,第二行开始使用单空格缩进,换行符被转为空格;多行字符使用|保留换行符,使用>折叠换行;+表示保留文字块末尾的换行,-表示删除字符串末尾的换行;字符串之中可以插入HTML标记。
- 整数:数值直接用字面量表示。
- 浮点数:以字面量表示。
- 布尔值:使用true和false表示。
- Null:使用~表示null。
- 时间
- 日期
下面是YAML语法中字符串的使用语法和例子:
str: ZuZu
str1: 'YAML'
str2: "YAML2"
str3: first
second
third
str4: |+
1111
2222
3333
str5: >-
111
222
333
html: |
<div style="color: #fff">
其它数据类型的使用则比较简单:
intnumb: 34
floatnumb: 3.14
bool: true
mynull: ~
date: 2012-01-24
datetime:
- 2018-02-17T15:02:31+08:00
YAML引用
YAML使用&建立锚点,使用*引用锚点上的值,<<用于合并到当前数据,下面是网上的一个例子:
defaults: &defaults
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults
test:
database: myapp_test
<<: *defaults
建立的锚点是defaults,使用*引用锚点,<<表示合并锚点上的数组到当前位置,其效果等同于:
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
要注意的是&后面跟锚点的名称,该名称在YAML中不被解释为值,*后面跟引用锚点的名称,同样不会将名称作为值,只会引用锚点所在行的数据。
总结
综上看来,YAML语法的内容很少,本YAML教程介绍得不一定完整,但是YAML的重点在于运用,遇到新的东西或问题就应该花几分钟好好分析下,学不完,但经验可以逐渐积累。
以上就是YAML语法的基本用法介绍了,本文也是我个人的学习记录,希望也能帮助你使用YAML。