YAML基础语法和完整使用教程

2021年3月8日16:24:11 发表评论 3,197 次浏览

本文概述

前言

YAML基础语法和完整使用教程

本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。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: