YAML是专门来写配置文件的语言,远比JSON要方便,正如YAML表示的YAML Ain't Markup Language。YAML是一种简洁的非标记语言,以数据为中心,使用空白、缩进、分行组织数据,从而表示的更加简洁易读。
官网地址:http://yaml.org/
一个在线演示站点:http://nodeca.github.io/js-yaml/
基本规则
大小写敏感
使用缩进表示层级关系
禁止tab缩进,只能使用空格键
缩进长度没有限制,只要元素对其就表示这些元素属于一个层级
使用#表示注释
字符串可以不用引号
数据结构
散列表(map或对象)
使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,如:
# YAML表示
age : 12
name : huang
# 对应的Json表示
{'age':12,'name':'huang'}
也可以写成一行
# YAML表示
{age:12,name:huang}
# 对应的Json表示
{'age':12,'name':'huang'}
数组(list)
使用连字符(-)表示,如:
# YAML表示
- a
- b
- 12
# 对应Json表示
['a','b',12]
也可以写成一行
# YAML表示
[a,b,c]
# 对应Json表示
[ 'a', 'b', 'c' ]
纯量(scalar)
数据最小的单位,不可以在分割,如:
强制转换类型
e: !!str 123 #整数转字符
f: !!str true #布尔值转字符
多行字符串可以使用|保留换行符,可以使用>折叠换行,如:
this: |
Foo
Bar
that: >
Foo
Bar
{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }
+表示保留文字块末尾的换行,-表示删除字符串末尾的换行,如:
s1: |
Foo
s2: |+
Foo
s3: |-
Foo
{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
字符串之中可以插入HTML标记,如:
message: |
<p style="color: red">
段落 </p>
{ message: '\n<p style="color: red">\n 段落\n</p>\n' }
锚点&和别名*,可以用来引用,如:
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' ]
数据嵌套
map和list的元素可以是另一个map或list或者是纯量,由此出现4种常见的嵌套:
map嵌套map
map嵌套list
list嵌套list
list嵌套map
举一个列子,list嵌套map,如:
# YAML表示
- id: 1
name: huang
- id: 2
name: liao
# 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]