Yaml
YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
基本语法
使用Unicode字符,可以使用UTF-8或者UTF-16
大小写敏感
使用缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
在单一文件中,可用连续三个连字号
---
区分多个文件,有选择性的连续三个点号( ... )用来表示文件结尾
纯量(scalars)数据
字符串
单行字符串
# 普通形式 string1: hello world! # 单引号,不会解析任何转义字符,所有内容都会原样输出 string2: 'hello\nworld!' # 如果要表示单引号,需要使用 '' string3: 'hello ''world!''' # 双引号,会解析转义字符,如果要表示\,需要使用\\ string4: "hello\nworld!"
{ "string1": "hello world!", "string2": "hello\\nworld!", "string3": "hello 'world!'", "string4": "hello\nworld!" }
多行字符串,每行的换行以及空格会被转换为单个空格字符
# 普通样式,不支持转义字符,每行行尾空格不保留 lstr1: a bb\n ccc #这里有空格 # 单引号样式,不支持转义字符,'的输入需要使用''替代转义 lstr2: 'a\n ''bb'' ccc ' # 双引号样式,支持转义字符,\与"要进行转义处理,\放置在行尾可以删除空格 lstr3: "a\n bb\"\ ccc "
{ "lstr1": "a bb\\n ccc", "lstr2": "a\\n 'bb' ccc ", "lstr3": "a\n bb\"ccc " }
多行字符串,使用
>
折叠换行符,将多行折叠为一行注意每行文字之前要有相同的缩进
会在末尾添加换行符
不会解析转义字符
\
,'
,"
, 他们都会被原样输出行与行之间会有空格
bstr1: > 'a' "bb" \ccc\ dddd
{ "bstr1": "'a' \"bb\" \\ccc\\ dddd\n" }
多行字符串,使用
|
保留换行符注意每行文字之前要有相同的缩进
会在末尾添加换行符
不会解析转义字符
\
,'
,"
, 他们都会被原样输出行与行之间保留换行符,而不是空格
bstr2: | 'a' "bb" \ccc\ dddd
{ "bstr2": "'a'\n\"bb\"\n\\ccc\\\ndddd\n" }
多行字符串,使用
+
和-
对>
以及|
进行样式裁剪>
,|
:“剪辑”:保持尾行换行符,删除尾随空白行。>-
,|-
:“strip”:删除尾行换行符,删除尾随空白行。>+
,|+
:“keep”:保持尾行换行符,保持尾随空行。
cstring1: | a bb cstring2: |- a bb cstring3: |+ a bb
{ "cstring1": "a\nbb\n", "cstring2": "a\nbb", "cstring3": "a\nbb\n\n" }
数字
# 整数
number1: 0
number2: 100
# 八进制整数
number3: 014
# 十六进制整数
number4: 0xC
# 浮点数
number5: 10.01
# 指数
number6: 1.2e+34
{
"number1": 0,
"number2": 100,
"number3": 12,
"number4": 12,
"number5": 10.01,
"number6": 1.2e+34
}
空值
nul1: null
nul2: ~
{
"nul1": null,
"nul2": null
}
布尔
bol1: true
bol2: false
{
"bol1": true,
"bol2": false
}
时间和日期
使用 iso-8601 标准表示日期与时间
date1: 2018-01-01t16:59:43.10-05:00
date2: 1976-07-31
类型转换
Yaml 内置的类型列表:
类型
描述
int
整数
float
浮点数
bool
布尔
str
字符串
binary
字符串
timestamp
日期时间
null
空
set
集合
omp, pairs
键值列表或对象列表
seq
序列,也是列表
map
键值表
使用!
进行类型转换,如果是单个!
,代表转换类型为自定义类型,如果是!!
则是内置类型:
!!int # 整数类型
!!float # 浮点类型
!!bool # 布尔类型
!!str # 字符串类型
!!binary # 也是字符串类型
!!timestamp # 日期时间类型
!!null # 空值
!!set # 集合
!!omap,!!pairs # 键值列表或对象列表
!!seq # 序列,也是列表
!!map # 键值表
对象数据
一个yaml文档就是一个对象:
animal: dog: name: 旺财 age: 2
{ "animal": { "dog": { "name": "旺财", "age": 2 } } }
行内对象
animal: dog: {name: 旺财, age: 2}
{ "animal": { "dog": { "name": "旺财", "age": 2 } } }
数组数据
一组连词线开头的行,构成一个数组:
hobby: - 打篮球 - 玩游戏 - 看视频
{ "hobby": [ "打篮球", "玩游戏", "看视频" ] }
行内数组
hobby: [打篮球, 玩游戏, 看视频]
{ "hobby": [ "打篮球", "玩游戏", "看视频" ] }
引用
引用对象
defaults: &defaults # 定义一个名称为defaults的锚点
adapter: postgres
host: localhost
development:
database: myapp_development
<<: *defaults # 将锚点对象的所有属性,合并到当前位置
test:
database: myapp_test
<<: *defaults
等同于
defaults:
adapter: postgres
host: localhost
development:
database: myapp_development
adapter: postgres
host: localhost
test:
database: myapp_test
adapter: postgres
host: localhost
引用单个值
- &showell Steve
- Clark
- Brian
- Oren
- *showell
等同于
- Steve
- Clark
- Brian
- Oren
- Steve
参考
最后更新于
这有帮助吗?