YAML 入门教程
概念
YAML 是一个可读性高,用来表达数据序列化的格式。
YAML 的语法和其他高级语言类似,并且可以简单表达清单、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件、倾印调试内容、文件大纲(例如:许多电子邮件标题格式和YAML 非常接近)。尽管它比较适合用来表达层次结构式(hierarchical model)的数据结构,不过也有精致的语法可以表示关系性(relational model)的数据。由于 YAML 使用空白字符和分行来分隔数据,使得它特别适 grep/Python/Perl/Ruby 操作。其让人最容易上手的特色是巧妙避开各种封闭符号,如:引号、各种括号等,这些符号在嵌套结构时会变得复杂而难以辨认。
基本语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进不允许使用tab,只允许空格
- 缩进的空格数不重要,只要相同层级的元素左对齐即可
- '#'表示注释
YAML 转 json 网站: https://nodeca.github.io/js-yaml/
YAML 支持以下几种数据类型:
- 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
- 纯量(scalars):单个的、不可再分的值
键值对:
-
键值对用
key: value
表示,冒号后面需要加一个空格; -
也可以如下表示
map: # Unordered set of key: value pairs. Block style: Clark : Evans Ingy : döt Net Oren : Ben-Kiki Flow style: { Clark: Evans, Ingy: döt Net, Oren: Ben-Kiki }
对应json:
map: { 'Block style': { Clark: 'Evans', Ingy: 'döt Net', Oren: 'Ben-Kiki' }, 'Flow style': { Clark: 'Evans', Ingy: 'döt Net', Oren: 'Ben-Kiki' } }
数组:
数组以-加一个空格开头
pairs:
# Explicitly typed pairs.
Block tasks: !!pairs
- meeting: with team.
- meeting: with boss.
- break: lunch.
- meeting: with client.
Flow tasks: !!pairs [ meeting: with team, meeting: with boss ]
对应的 json:
pairs: {
'Block tasks': [
[ 'meeting', 'with team.' ],
[ 'meeting', 'with boss.' ],
[ 'break', 'lunch.' ],
[ 'meeting', 'with client.' ]
],
'Flow tasks': [ [ 'meeting', 'with team' ], [ 'meeting', 'with boss' ] ] }
复合实例讲解:
---
shudent:
user: tony
sex: man
score:
- math: !!str 100 # !!str 表示判断为字符串类型
- english: !!float 100.0 # !!float 表示判断为浮点数类型
- Chinese: 100
fly: true # 布尔类型,也可以是false
file: null # null 表示为空
file0:
birthday: 2022-01-01 10:00:00 # 时间格式为年月日用杠连接,时每秒用冒号连接
pi: 314e-2 # 科学计数法,相当于314*10^-2
book:
python
java
c++
book1: >
python
java
c++
book2: |
python
java
c++
# --- # 创建另外一个文件
# ... # 表示文件结束
对应的 json:
{ shudent:
{ user: 'tony',
sex: 'man',
score: [ { math: '100' }, { english: 100 }, { Chinese: 100 } ],
fly: true,
file: null,
file0: null,
birthday: Sat Jan 01 2022 18:00:00 GMT+0800 (中国标准时间),
pi: 3.14,
book: 'python java c++',
book1: 'python java c++\n',
book2: 'python\njava\nc++\n' } }