YAML语法的学习

1. YAML的简介

YAML是用来专门写配置文件的语言,语言是比较简单的,远比JSON格式简便。

实质上是一种数据串行化格式,写入.yml结尾的文件的数据会被转换为json格式的字符串。

2. YAML的约束

YAML配置文件需要遵守以下的规则:

基本语法

  • 大小写敏感
  • 使用缩进来表示层级关系
  • 缩进时不允许使用Tab键,只能使用空格
  • 缩进的空格数目不重要,只要相同的层级左侧空格缩进相同就行
  • #表示注释,当前行内的所有的内容都会被注释

3. YAML支持的数据结构

YAML支持的数据结构有三种

  • 对象:键值对的集合,也称为映射(Mapping)/哈希(hash)/字典(directory)
  • 数组:一组按次序排列的值,又称为序列(Sequence)和列表(list)
  • 纯量(scalars):单个的、不可再分的值

3.1 对象

// 写的语法最后都会转化为javaScript格式
animal: dog
// 显示出来的信息为: {animal:'dog'}
animal: {name: dog, age: 12}
// 显示出来的信息为: {hash: {name: 'dog', age: '12'}}

3.2 数组

// 数组格式的话,在需要构成数组的前面加一个-
animals: 
- dog 
- cat
- tiger
// 显示出来的信息为: { animals: [ 'cat', 'dog', 'tiger' ] }
-
 - cat
 - dog
 - tiger
// 显示出来的信息为: [ [ 'cat', 'dog', 'tiger' ] ]

3.3 复合结构

animals:
 dog
 cat
 tiger
dog:
 skills: catch mouse
// 显示出来的信息为:{ animals: 'dog cat tiger', dog: { skills: 'catch mouse' } }
// 缩进表示是否是同级元素

3.4 纯量

纯量是最基本的值,不可再分割的值。

纯量分类:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期
int: 10
number: 29.9
double: 30.0
parent: ~
date: 2019-07-09
// 显示出来的信息
{ int: 10,
  number: 29.9,
  double: 30,
  parent: null,
  date: Tue Jul 09 2019 08:00:00 GMT+0800 (中国标准时间) }

// !!双感叹号表示强制转换
e: !!str 123 
f: !!str true
// 显示出来的信息
e: '123', f: 'true'

3.5 字符串

字符串默认不用引号表示。

str: 这是字符串
// 显示出来的信息:{str: '这是字符串'}
// 如果字符串中包含空格或者特殊字符,需要放在引号之中

字符串可以使用单双引号来表示,但是需要注意,使用双引号的时候对于其中的特殊字符不会转义。

str: '字符串: \n字符串的内容'
// 结果: { str: '字符串: \\n字符串的内容' } 转义了

str: "字符串: \n字符串的内容"
// 结果: { str: '字符串: \n字符串的内容' } 未做转义操作

字符串中如果有除表示形式的单引号,需要使用''两个单引号来完成转义

str: '字符串: lady''s'
// 结果: { str: '字符串: lady\'s' }

字符串可以写成多行,但是需要注意,第二行的数据前面必须添加一个空格,否则报错,而且换行符会被转换为空格显示出来

str: 有多个
 字符串
 组合
 写法
// 结果: { str: '有多个 字符串 组合 写法' }

如果想保留换行符也是可以的,使用|或者使用>折叠换行符

str: |
 字符串
 组合
 写法
// 结果: { str: '字符串\n组合\n写法\n' }

|+表示保留末尾的换行符(所有的),|-表示删除末尾的换行符,全部的

this: |+
 包括末尾换行符,包括下一行的
 
str: |-
 删除末尾换汉符,下一行的也删除
 
// 结果: { this: '包括末尾换行符,包括下一行的\n\n', str: '删除末尾换汉符,下一行的也删除' }

3.6 引用

锚点&和别名*

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

// 结果: 
defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

&建立锚点,<<合并到当前数据,*引用锚点

3.7 函数和正则表达式的转换

# example.yml
fn: function () { return 1 }
reg: /test/
// 结果: { fn: 'function () { return 1 }', reg: '/test/' }


参考资料

YAML 语言教程–阮一峰

发布了74 篇原创文章 · 获赞 12 · 访问量 8235

猜你喜欢

转载自blog.csdn.net/cao1315020626/article/details/95240457