YAML 配置格式

2021-01-10 container

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 是无法替换的,输出仍然是原字符。