一、简介
YAML是一个可读性高,用来表达数据序列化的格式。
官网地址:https://yaml.org/
二、格式
1. 单行缩进
YAML可以用来描述好几行相同结构的数据的缩写语法,数组用"[]
“括起来,hash使用”{}
",
house:
family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }
2. 多行缩进
数据结构也可以使用类似大纲的缩排方式呈现,结构通过缩进来表示,连续的项目通过"-“来表示,map结构里key/value
对用冒号”:
"来分隔
#上面数据转化后的效果
house:
family:
name: Doe
parents:
- John
- Jane
children:
- Paul
- Mark
- Simone
address:
number: 34
street: Main Street
city: Nowheretown
zipcode: 12345
三、数据类型
YAML会自动判定数据形态是哪一种实体。如果用户想要将数据强制转换成自定义的类型。
---a: 123 # 整数
b: "123" # 字串(使用双括号)
c: 123.0 # 浮点数
d: !!float 123 # 浮点数,使用!!表达的严格型态
e: !!str 123 # 字串,使用严格型态
f: !!str Yes # 字串,使用严格型态
g: Yes # 布林值"真"
h: Yes we have No bananas # 字串(包含"Yes"和"No")
四、语法
- 使用空白字符为文件缩进来表示结构(不可以使用
TAB
) - 注解:
#
,可以出现在一行中的任何位置,而且范围只有一行(单行注解) - 数组(我自己理解的):以单行表示,使用
-
开始;或者使用[]
,成员之间使用,
(后面有空格
)隔开。 - Map:使用
:
分开键和值;或者使用{}
,成员之间使用,
(后面有空格
)隔开。
键可以使用?
开始,用来明确的表示多个词汇组成的键值。 - 字符串:平常不使用引号,必要时可以使用
""
、''
。
使用""
,有时需要\
,转义 - null:空值,使用
~
- 区分多个文件:在单一文件中,可以使用
- - -
,区分多个文件。可以使用...
表示文件结尾。 - 重复的内容可以使用
*
,复制&
标记的内容。<<
表示合并到当前数据 - 强制转型:
!!
。 - 指导指令:
-
%YAML
指导指令,用来识别文件的YAML版本。 -
%TAG
指导指令,被用在URI的前缀标记。这个方法在标记节点的类型时相当有用。
五、简单示例
#第一个文件
---
#数组
arr1: [java, c++, python]
arr2:
- java
- c++
- python
#map
people1:
name: 'jack'
age: 12
weight: !!float 12.00
people2: {name: lili, age: 18, weight: 80}
#空值
people3: ~
...
#第二个文件
---
people: &people
eat: !!str 吃饭
sleep: "睡觉"
jack:
<<: *people
age: 18
...