yaml简介
最近看代码,觉得大的工程都会使用单独使用配置文件,进行变量的声明和配置,而很多都是以yaml文件的形式保存。yaml是一种非常灵活的格式,几乎是json的超集。除了支持注释、换行符分隔、多行字符串、裸字符串和更灵活的类型系统之外,YAML 也支持引用文件,以避免重复代码。
yaml语法规则
基本规则:
- 大小写敏感
- 使用缩紧表示层级关系; 例如key:(空格)value,表示一个键值对,空格不可以省略。
- 缩进时不允许使用Tab键,只允许使用空格
- 缩紧的空格树木不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略
yaml的数据结构
- 对象:键值对的集合,又称为映射(mapping),哈希(hashes),字典(dictionary)
- 数组:一组按照次序排列的值,又称为序列(sequence),列表(list)
- 标量(scalars):单个的不可再分的值
对象
对于对象,格式为:
Map(属性和值)(键值对)的形式
key:(空格)value表示一个键值对,空格不可以省略。例如下面的
person:
name: vivi
age: 18
一行写法:
person:{name: vivi,age: 18}
读取后相当于json格式:
{"name":"vivi","age":18}
数组
一组连词线开头的行,构成一个数组。数组前加有 “-” 符号,符号与值之间需用空格分隔。
color:
- red
- blue
- green
一行写法:
color: [red,blue,green]
相当于JSON:
[“red”,“blue”,“green”]
纯量
单个的、不可再分的值。(如:字符串、bool值、整数、浮点数、时间、日期、null等)
n1: 8
n2: 8.8
n3: true
n4: false
n5: ‘vivi’
特殊符号
null使用~表示
例如:
parent: ~
表示为:
{ parent: null }
YAML 允许使用两个感叹号,强制转换数据类型。
例如:
e: !!str 123
f: !!str true
表示为:
{ e: '123', f: 'true' }
锚点&和别名*,可以用来引用。
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
&用来建立锚点(defaults),<<表示合并到当前数据,* 表示引用锚点。
例如:
- &showell Steve
- Clark
- Brian
- Oren
- *showell
表示为
[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]