如何编写 YAML
YAML 是专门用来写配置文件的语言,非常简洁和强大。
yaml 介绍
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。
它的基本语法规则如下。
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用 Tab 键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
yaml 中的值
在编写小程序页面时,用到的值类型一共有五种:
- string(字符串)
- number(数字)
- boolean(布尔值)
- array(数组)
- object(对象)
number
number,译为数字,代表可直接参与运算的数值。在 YAML 中,整数和小数均直接表示。
例:
5201314
-1
3.141592654
总结
遇到 number
类型的数据时,直接填入数字即可。
boolean
boolean,译为布尔值,表示真假。只有两个可选值: true
和 false
。
总结
遇到 boolean
类型的数据时,直接填入 true
或 false
即可。
string
string,译为字符串,用于表达文本。在 YAML 中,不与其他规则相冲突的字符串可直接表示。
例:
inNENU,最全新生攻略
规则
由于字符串的内容是多样化的,如果字符串出现了 YAML 约定的格式或特殊字符,则需要使用引号引起。引起时两侧保持一致,单引号、双引号均可。
特殊字符可使用转义符号表示,如回车可表示为
\n
,制表符 (Tab) 可表示为\t
特别地,对于
\
自己,需要表示为\\
例:
春眠不觉晓, 处处闻啼鸟。
可表示为
"春眠不觉晓,\n处处闻啼鸟。"
如果字符串含有特殊格式 (如对象键值对格式": "、首位有空格、首尾有引号) 或命中了关键字如
true
,需要放在双引号之中。特别地,如果字符串两端或引起的内容内含有双引号,需要改用单引号,或在使用双引号的情况下将内部的双引号使用
\
转义为\"
。例:
- 关键字:
3
字符串需表达为"3"
,true
字符串需表达为"true"
前面有空格
需表示为
" 前面有空格"
注: 这很简单
因命中对象键值对表示方法,需用表示为"注: 这很简单"
A saying goes: "Great hopes make great man."
因末尾出现双引号可使用单引号引起'A saying goes: "Great hopes make great man."'
如果字符串有多行,可以以
|-
开头,并另起一行开始正常换行书写,无需再包含双引号。|- 这是一段文字。 这是新一段文字。 1. 序号1,标号前有空格 2. 序号2,标号前有空格
常见混淆点
1
是可以参加运算的数字;"1"
是表示内容的字符串;同理,"true"
表达 true 文本,而true
是表示“真”的布尔值。如果想要在字符串中表示回车,请输入
\n
并使用引号引起字符串,或使用|-
开头多行表示。
array
Array 译为数组,它是一个内容的集合,每个数组的每一项叫一个元素(element)。每个元素(element)可以是其他的任何值类型。
一组连词线开头的行,构成一个数组。
例:
- Cat - Dog - Goldfish
- -5 - abc - true
在此数组中第一项是数字
-5
,第二项是字符串"abc"
,第三项是布尔值true
。数组的元素也可以是接下来的 object,会在“嵌套”一节中演示。
总结
array 是一个包含若干 元素 的集合,其中元素可以是其他数据类型。
object
object 译为对象(不是您想的那个对象),它是一组“键-值”对集合。每个键(key)对应着一个值(value),用冒号对应:
键1: 值1
键2: 值2
其中,键需要为有效的字符串,值可以是任何内容。
例:
a: 1 b: "2" c: true d: "false"
该对象有四项,分别是:
- 值为数字
1
的a
- 值为字符串
2
的b
- 值为布尔值 真(
true
)的c
- 值为字符串
false
的d
- 值为数字
tag: text header: 校园卡说明 text: 校园卡是东师的金融消费卡
总结
object是一个拥有若干键值对的集合,其中值可以是其他数据类型。
关于值的嵌套
由于 array 的元素和 object 的键值对中的值可以是五种值的任一个,故可以发生嵌套。
前文提到“YAML 使用缩进表示层级关系”。如果您想进行嵌套,为了表示从属关系,作为数组元素或对象键值的其他对象或数组,应进行缩进。
注意
需要特别注意,对象的每个键值对、数组的每个元素必须有相同的缩进,通常为两个空格。
如:
animal:
- dog
- cat
- fish
personal-info:
name: Mr.Hope
gender: male
address:
- province: Liao Ning
city: AnShan
- province: Ji Lin
city: Changchun
就是一个对象,它有两个键 animal
和 personal-info
,animal
键对应的值是一个数组,包含三个字符串 dog
、cat
和 fish
,而 personal-info
的值又是对象。该对象的 address
的值还是一个数组,数组的每个元素又是对象。
注释
除了配置文件外,可以通过添加注释的方式添加说明文字。
YAML 中用#
表示注释,从这个字符一直到行尾,都会被解析器忽略。
如:
# 这一行会被忽略
这一行会被当成一个字符串