这篇文章通过具体示例介绍一下YAML常见的使用方法与注意事项。
知识点:
- 单行注释:单行注释使用#进行标记,可以在单行的任何位置开始注释的内容
- 多行注释:不提供特殊的多行注释,使用多行行首的单行注释#实现多行注释的需求
键/值方式:使用冒号进行分隔
开始符号:---用于表示开始的符号,在一个文件中包含多个YAML设定的时候使用非常常见。
结束符号:…用于表示yaml文件结束
liumiaocn:yaml liumiao$ cat demo/yamlcomment.yml
--- #Yaml sample usage: dictionary & comment
# Yaml Sample usage
# key/value pair
# name and greeting messages
name: liumiaocn
greetingmessages: hello
...
liumiaocn:yaml liumiao$
知识点:
- 键/值方式:也可使用{}结合逗号进行表达
liumiaocn:yaml liumiao$ cat demo/yamldic.yml
--- #Yaml sample usage: dictionary & comment
# Yaml Sample usage
# key/value pair
# name and greeting messages
{name: liumiaocn, greetingmessages: hello}
...
liumiaocn:yaml liumiao$
知识点:
- 单引号与双引号:字符串类型可以不使用单引号和双引号,使用单引号和双引号与不使用的时候在特殊字符及其转义的时候有些细微的区别。
liumiaocn:yaml liumiao$ cat demo/stringquote.yml
--- #Yaml sample usage: dictionary & comment
# Yaml Sample usage
# key/value pair
# name and greeting messages
name: liumiaocn
greetingmessages: hello \n in a new line
greetingmsg2: "message with double quotation \n in a new line"
greetingmsg3: 'message with single quotation \n in a new line'
...
liumiaocn:yaml liumiao$
知识点:
- 支持列表类型数据
liumiaocn:yaml liumiao$ cat demo/array.yml
---
names: [Liumiaocn, Michael]
greetings:
- Welcome
- to
- YAML
...
liumiaocn:yaml liumiao$
知识点:
- 组合数据类型:支持键/值方式和列表类型,并可进行嵌套组合
liumiaocn:yaml liumiao$ cat demo/composed.yml
---
names:
- LiuMiaocn
- Michael
greetings:
message1: Welcome
message2: to
message3: YAML
...
liumiaocn:yaml liumiao$
知识点:
- 基本数据类型:支持整型、浮点型、时间戳类型、Null等基本数据类型
liumiaocn:yaml liumiao$ cat demo/basictype.yml
---
# string
stringvar: hello this is a string
# boolean Yes == True
boolvar: Yes
# integer
intvar: 1001
# timestamp
timevar: 2019-07-10 06:05:01
# Null
nullvars:
- nullvar: null
- Nullvar: Null
...
liumiaocn:yaml liumiao$
liumiaocn:yaml liumiao$ cat demo/booleanvar.yml
---
# boolean value :false
falsevar: false
Falsevar: False
FALSEvar: FALSE
novar: no
Novar: No
NOvar: NO
offvar: off
Offvar: Off
OFFvar: OFF
# boolean value :true
truevar: true
Truevar: True
TRUEvar: TRUE
yesvar: yes
Yesvar: Yes
YESvar: YES
onvar: on
Onvar: On
ONvar: ON
liumiaocn:yaml liumiao$
知识点:
- 较长的描绘性说明:使用|与>以及>-来处理常见的对于较长的描绘性说明的要求
liumiaocn:yaml liumiao$ cat demo/blockmessage.yml
---
multiplelinemessages: |
sow a thought, reap an action;
sow an action, reap a habit;
sow a habit, reap a character;
sow a character, reap a destiny.
sinlelinemessagewithbr: >
sow a thought, reap an action;
sow an action, reap a habit;
sow a habit, reap a character;
sow a character, reap a destiny.
singlelinemessagewithoutbr: >-
sow a thought, reap an action;
sow an action, reap a habit;
sow a habit, reap a character;
sow a character, reap a destiny.
...
liumiaocn:yaml liumiao$
知识点:
- 重复性内容:可以使用锚点标记&和应用标记*结合使用可以处理重复性的内容
liumiaocn:yaml liumiao$ cat demo/anchors.yml
---
defaultgreeting: &defaultgreetingref
name: &nameref Liumiaocn
message: Hello
# override message column
welcomegreeting:
<<: *defaultgreetingref
message: Welcome
# add new column
newgreeting:
newname: *nameref
newmessage: New Message Information
...
liumiaocn:yaml liumiao$
注意:&和*虽然可以进行锚点的设定和引用,但仅限于此,如果希望实现其他语言中的concat或者+重载符所实现的简单作用,在YAML当前的1.2规范中还是无法实现的。在YAML中做基础的数据的描述,至于使用这些数据进行何种运算,连接也好查询也好,这些在大部分编程语言中都非常简单。
知识点:
- 强制类型转换:可以使用!!用于强制类型转换
liumiaocn:yaml liumiao$ cat demo/convert.yml
---
name: Liumiaocn
greeting: Hello
canread: Yes
yesmessage: !!str Yes
id: '1001'
integerid: !!int '1001'
...
liumiaocn:yaml liumiao$
知识点:
- 空白字符限制:在使用逗号及冒号时,后须接一个空白字符
- 缩进:不支持Tab
liumiaocn:yaml liumiao$ cat demo/errorformat.yml
---
# without space behind person:
person:{name: Liumiaocn, id: 1001}
greetings:
# use tab rather than space
message: Hello
...
liumiaocn:yaml liumiao$
上述YAML文件存在格式问题:
https://yaml.org/type/
https://yaml.org/refcard.html