YAML 是一种可读性高的数据标记语言,通常用于配置文件,可存放一些复杂的数据类型,例如列表、字典等。
简介
对于语法的详细定义以及一些三方库可以参考 yaml.org 中的介绍,这里对其常用格式简单介绍。
- 配置项大小写敏感。
- 通过空格缩进区分层级,不允许使用 Tab 键,空格数量不要求,对齐即可。
- 使用
#
表示注释。
数据类型。
- 标量,单个值不可再分,例如字符串、布尔值、整数等。
- 数组,按照顺序排序的值。
- 对象,类似映射、字典、哈希。
在冒号和 -
后的值前面需要添加一个空格。
#----- 标量
# 字符串,无需使用引号,不过特殊字符、空格需要单引号转义
email: 'hello@example.org'
message: 'Hello World'
# 布尔值 True/False
isFlag: True
# Null 通过 ~ 表示
address: ~
# 日期,支持时区格式
date: 2018-02-17
birth: 2018-02-17T15:02:31+08:00
#----- 数组
numbers: [1, 2, 3, 4, 5]
numbers:
- 1
- 2
#----- 对象
maps: {"name": "andy", "age": 18}
maps:
name: andy
age: 18
有了上述的对象后,就可以按照层级进行组合。
换行
如果某个消息过长,在 YAML 中会自动将换行转换为空格,同时去掉末尾的换行,也就是下面的 >-
配置,除此之外还可以进行详细配置。
主要通过 |
和 >
标识,其中前者保留换行符,而后者则会替换成空格;另外,通过 +
和 -
标识标识末尾的换行,前者保留(默认)后者删除,示例如下。
# 保留换行,等价于 |+
#>>> Hello\nWorld\n
msg: |
Hello
World
# 将换行替换为空格,等价于 >+
#>>> Hello World\n
msg: >
Hello
World
# 保留消息换行但取消字符末尾换行
#>>> Hello\nWorld
msg: |-
Hello
World
# 消息换行替换为空格,同时取消末尾换行
#>>> Hello World
msg: >-
Hello
World
配置复用
就是对已经定义过的配置,在后面的配置可以直接引用,无需再写一遍,从而减少重复工作,而且便于修改配置。将定义的复用项称为锚点,用 &
标识;引用锚点则用 *
标识。
name: &app YourApplicationName
env: &env
VERSION: 1.2.3
properties:
key1: *app
key2: *env
其中 key2
引用的是一个对象。需要注意的是,锚点不能在字符串中作为变量使用,例如 key: your application is *app
是无法替换的,输出仍然是原字符。