YAML设计理念
YAML: YAML Ain't Markup Language What It Is: YAML is a human friendly data serialization standard for all programming languages.
以上是YAML官网对其的说明,简言之就是:YAML是以人为本的各语言通用的数据序列化标准。
---
Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar
简介
YAML实质上就是一种通用的数据串行化格式。提供一种各语言通用的文件配置格式。其基本的基本语法规则如下:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
其支持的数据格式主要是三种:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
对象
对象是一组键值对,使用:结构表示。
person:
name: Jam
age: 27
转换成JavaScript如下。
{ person: { name: 'Jam', age: 27 } }
YAML也允许另一种写法,将所有键值对写成一个行内对象。
person: {name: Jam, age: 27}
转换成JavaScript如下。
{ person: { name: 'Jam', age: 27 } }
数组
一组连词线开头的行,构成一个数组。
- yaml
- json
转换成JavaScript如下。
[ 'yaml', 'json' ]
数组也可以采用行内表示法。
[yaml, json]
转换成JavaScript如下。
[ 'yaml', 'json' ]
多维数组表示如下。
-
- yaml
- json
转换成JavaScript如下。
[ [ 'yaml', 'json' ] ]
纯量
纯量是最基本的、不可再分的值。
- 字符串
- 布尔值
- 整数
- 浮点数
- Null
- 时间
- 日期
person:
name: Jam
nickname: 'Jam: J'
male: true
age: 27
height: 1.75
child: ~
birth: 2001-12-14t21:59:43.10-05:00
today: 2020-01-01
female: !!str false
转换成JavaScript如下。
{ person:
{ name: 'Jam',
nickname: 'Jam: J',
male: true,
age: 27,
height: 1.75,
child: null,
birth: Sat Dec 15 2001 10:59:43 GMT+0800 (中国标准时间),
today: Wed Jan 01 2020 08:00:00 GMT+0800 (中国标准时间),
female: 'false' } }
复合结构
对象和数组可以结合使用,形成复合结构。
web:
- node
- javascript
- html
- css
books:
-
name: 数据结构
-
name: 算法导论
转换成JavaScript如下。
{ web: [ 'node', 'javascript', 'html', 'css' ],
books: [ { name: '数据结构' }, { name: '算法导论' } ] }
引用
在YAML中使用&用来建立锚点,使用<<表示合并到当前数据,使用*用来引用锚点。
default: &default
name: YAML
doc:
content: 'YAML Ain't Markup Language'
<<: *default
转换成JavaScript如下。
{ default: { name: 'YAML' },
doc: { content: 'YAML Ain\'t Markup Language', name: 'YAML' } }
注释
在YAML中使用#表示注释,从这个字符一直到行尾,都会被解析器忽略。