YAML
是专门用来写配置文件的语言,非常简洁和强大,远比 JSON
格式方便。
简介
YAML
语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式
它的基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键, 只需要使用空格
- 缩进的空格数目不重要, 只要相同层级的元素左侧对其即可
# 表示注释, 从这个字符一直到行尾, 都会被解析器忽略
YAML
支持的数据结构有三种。
- 对象: 键值对的集合, 又称为映射(
mapping
) / 哈希(hashes
) / 字典(dictionary
)
- 数组: 一组按次序排列的值, 又称为序列(
sequence
) / 列表 (list
)
- 纯量(
scalars
): 单个的、不可再分的值
对象
对象的一组键值对, 使用冒号结果表示
转为 JavaScript
如下:
YAML
也允许另一种写法, 将所有键值写成一个行内对象
1
| hash: { name: Caoxl, foo: bar }
|
转为 JavaScript
如下:
1
| { hash: {name: 'Caoxl', foo: 'bar' }}
|
数组
一组连词线开头的行, 构成一个数组
转为 JavaScript
如下:
1
| ['Cat', 'Dog', 'Goldfish']
|
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格
1 2 3 4
| - - Cat - Dog - Goldfish
|
转为JavaScript
如下:
1
| [['Cat', 'God', 'Goldfish']]
|
数组也可以采用行内表示法
转为JavaScript
如下:
1
| { animal: ['Cat', 'Dog']}
|
复合结构
对象和数组可以结合使用, 形成复合结构
1 2 3 4 5 6 7 8 9 10
| languages: - Ruby - Perl - Python
websites; YAML: yaml.org Ruby: ruby-lang.org Python: python.org Perl: use.perl.org
|
转为 JavaScript
如下:
1 2 3 4 5 6 7 8
| {language: ['Ruby, 'Perl', 'Python'], websites: { YAML: 'yaml.org', Ruby: 'ruby-lang.org', Python: 'python.org', Perl: 'use.perl.org' } }
|
纯量
纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript
的纯量。
- 字符串
- 布尔值
- 整数
- 浮点数
Null
- 时间
- 日期
转为JavaScript
如下:
转为JavaScript
如下:
转为 JavaScript
如下:
1
| iso8601: 2018-12-14t 21:59:43.10-05:00
|
转为JavaScript
如下:
1
| { iso8601: new Date('2018-12-14t21:59:43.10-05:00') }
|
- 日期采用复合
ISO8601
格式的年、月、日表示。
转为 JavaScript
如下。
1
| { date: new Date('1976-07-31') }
|
1 2
| e: !!str 123 f: !!str true
|
转为JavaScript
如下:
字符串
字符串是最常见, 也是最复杂的一种数据类型
转为 JavaScript
如下:
- 如果字符串之中包含空格或特殊字符, 需要放在引号之中
- 单引号双引号都可以使用, 双引号不会对特殊字符转义
转为JavaScript
如下:
1
| { s1: '内容\\n字符串', s2: '内容\n字符串'}
|
- 单引号之中如果还有单引号,必须连续使用两个单引号转义。
转为JavaScript
如下:
- 字符串可以写成多行, 从第二行开始, 必须有一个单空格缩进, 换行符会被转为空格
转为JavaScript
如下:
- 多行字符串可以使用
|
保留换行符, 也可以使用>
折叠换行
1 2 3 4 5 6
| this: | Foo Bar that: > Foo Bar
|
转为JavaScript
如下:
1
| { this: 'Foo\nBar\n', that: 'Foo Bar\n' }
|
+
表示保留文章块末尾的换行, -
表示删除字符串末尾的换行
1 2 3 4 5 6 7 8 9
| s1: | Foo
s2: |+ Foo
s3: |- Foo
|
转为JavaScript
如下:
1
| { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }
|
1 2 3 4
| message: | <p style="color: red"> 段落 </p>
|
转为 JavaScript
如下
1
| { message: '\n<p style="color: red">\n 段落\n</p>\n' }
|
参考