YAML实践指南:2:使用示例

在这里插入图片描述
这篇文章通过具体示例介绍一下YAML常见的使用方法与注意事项。

注释写法

知识点:

  • 单行注释:单行注释使用#进行标记,可以在单行的任何位置开始注释的内容
  • 多行注释:不提供特殊的多行注释,使用多行行首的单行注释#实现多行注释的需求
    键/值方式:使用冒号进行分隔
    开始符号:---用于表示开始的符号,在一个文件中包含多个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$

键/值对象的{}写法

知识点:

  • 键/值方式:也可使用{}结合逗号进行表达
  • YAML示例
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$ 

字符串类型:单引号/双引号/无引号

知识点:

  • 单引号与双引号:字符串类型可以不使用单引号和双引号,使用单引号和双引号与不使用的时候在特殊字符及其转义的时候有些细微的区别。
  • YAML示例
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$ 

列表

知识点:

  • 支持列表类型数据
  • YAML示例
liumiaocn:yaml liumiao$ cat demo/array.yml 
---
names: [Liumiaocn, Michael]
greetings:
  - Welcome
  - to
  - YAML
...
liumiaocn:yaml liumiao$

列表与键/值的嵌套

知识点:

  • 组合数据类型:支持键/值方式和列表类型,并可进行嵌套组合
  • YAML示例
liumiaocn:yaml liumiao$ cat demo/composed.yml 
---
names: 
  - LiuMiaocn
  - Michael
greetings:
  message1: Welcome
  message2: to
  message3: YAML
...
liumiaocn:yaml liumiao$ 

基本数据类型

知识点:

  • 基本数据类型:支持整型、浮点型、时间戳类型、Null等基本数据类型
  • YAML示例
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$
  • 布尔类型的True/False
    除了True/False,还有多种可以在YAML中表示类似的方式,详细可参看如下示例
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$

较长的文本描述

知识点:

  • 较长的描绘性说明:使用|与>以及>-来处理常见的对于较长的描绘性说明的要求
  • YAML示例
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$

用锚点和引用描述重复性内容

知识点:

  • 重复性内容:可以使用锚点标记&和应用标记*结合使用可以处理重复性的内容
  • YAML示例
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中做基础的数据的描述,至于使用这些数据进行何种运算,连接也好查询也好,这些在大部分编程语言中都非常简单。

强制类型转换

知识点:

  • 强制类型转换:可以使用!!用于强制类型转换
  • 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文件存在格式问题:

  • 问题1:person:后面缺一个空格
  • 问题2:message:前面使用的是Tab而不是空格

参考内容

https://yaml.org/type/
https://yaml.org/refcard.html

你可能感兴趣的:(#,YAML)