YAML(Yet Another Markup Language)
是一种适用于所有编程语言的,人性化数据序列化语言,功能类似与 json、xml 等,但更简洁和方便
介绍
- 基本语法
- 缩进表示层级关系,只允许使用空格缩进,空格数量不要求,但需要对齐
#
表示注释- 大小写敏感
---
表示内容的开始...
表示内容的结束(非必需)
- 数据类型
对象
:键值对,又称:dict、hash、map数组
:有序排列的值,又称:sequence、listscalars
:标量,单独的、不可再分的值
- vscode 检测插件 redhat-developer/vscode-yaml
数据类型
对象
格式:key: value
,冒号后加一个空格
key1: value1
key2:
c-key1: c-value1
c-key2: c-value2
问号 ?
声明一个复杂(key)对象,示例如下:
?
- keypart1
- keypart2
:
- value1
- value2
# 对应的 json
{
"keypart1,keypart2": [
"value1",
"value2"
]
}
属组
以 -
开头的行,示例
key1:
- v1
- v2
- v3
# 或
key1: [v1, v2, v3]
# 对应的 json
{
"key1": [
"v1",
"v2",
"v3"
]
}
结果子成员:
-
- v1
- v2
- v3
# 对应json
[
[
"v1",
"v2",
"v3"
]
]
users:
-
id: 1
name: u1
-
id: 2
name: u2
# 或
users: [{id: 1, name: c1}, {id:2, name: c2}]
# 对应的 json
{
"users": [
{
"id": 1,
"name": "u1"
},
{
"id": 2,
"name": "u2"
}
]
}
scalars
标量是最基本的,不可再分的值,如下:
示例:
string:
- 'Hello world' # 使用双引号或者单引号包裹特殊字符。使用双引号引用字符串时,会转义字符串中的特殊字符(例如\n);使用单引号时不会转义字符串中的特殊字符
- newline
newline2 # 字符串可以被拆成多行,每行使用空格分隔
boolean:
- true # true, True
- yes # yes, Yes, YES
- false # false, False
- no # no, No, NO
int:
- 99
- 0b1010_0111_0100_1010_1110 # 二进制
float:
- 3.14
- 3.1415926e+3 # 科学计数法
date:
- 2021-10-24 # 日期必须为 ISO 8601 格式,即yyyy-MM-dd
datetime:
- 2021-10-24T15:02:31+08:00 # 时间必须为 ISO 8601 格式,时间和日期使用 T 连接,+ 后表示时区
null:
nodeName: null
parent: ~ # ~ 表示null
# 对应的 json
{
"string": [
"Hello world",
"newline newline2"
],
"boolean": [
true,
false
],
"int": [
99,
685230
],
"float": [
3.14,
3141.5926
],
"date": [
"2021-10-24T00:00:00.000Z"
],
"datetime": [
"2021-10-24T07:02:31.000Z"
],
"null": {
"nodeName": null,
"parent": null
}
}
高级使用
保留换行(Newlines Preserved)
竖线符 |
实现
lines: |
第一行
第二行
第三行
第四行
第五行
# 对应的 json
{
"lines": "第一行\n第二行\n 第三行\n 第四行\n第五行\n"
}
|+
保留每行尾部的换行符\n
,同时保留内容结尾处的换行符 \n
|-
保留每行尾部的换行符\n
,同时删除内容结尾处的换行符 \n
去除换行(Newlines Folded)
右尖括号 >
实现,遇到空白行或不对齐时会被识别为换行
lines: >
第一行
第二行
第三行
第四行
第五行
# 对应的 json
{
"lines": "第一行 第二行\n\n 第三行\n 第四行\n第五行\n"
}
Adding -
after either |
or >
will strip the newline character from the last line:
a: >- # folded into "one two"
one
two
b: >- # folded into "one\ntwo"
one
two
类型转换
使用 !!
(双感叹号+目标类型)强制转换类型
a: !!float '666' # !! 为严格类型标签
b: '666' # 单、双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串
# 对应的 json
{
"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true",
"f": "yes"
}
引用
使用 &
表示锚点,*
表示引用锚点,<<
表示合并到当前数据
defaults: &defaults
class: 6-1
teacher: "xianbin"
user1:
name: 'u1'
<<: *defaults
user2:
name: 'u2'
<<: *defaults
# 对应的 json
{
"defaults": {
"class": "6-1",
"teacher": "xianbin"
},
"user1": {
"name": "u1",
"class": "6-1",
"teacher": "xianbin"
},
"user2": {
"name": "u2",
"class": "6-1",
"teacher": "xianbin"
}
}
其他