Skip to content

配置文件

长期以来,配置文件都以.json后缀的形式出现,各大编程语言也都提供了解析JSON文件的库。后来突然出现了一种.yml后缀的配置文件,并且这种格式的使用越来越频繁。如日中天的Docker和K8S就是使用这种格式作为其配置文件。

一个新工具的出现避免不了有两个原因:

  • 旧工具在某些使用场景表现吃力,需要更高效的替代方案
  • 旧工具用起来也没什么不好,但是新的工具更加顺手

YAML就属于第二种。一开始的时候大家都用JSON作为配置文件,也没觉得有什么不好。但是YAML出现后,就开始觉得JSON文件好乱啊,这写的都什么玩意,还不支持注释,看得人头晕。

YAML实际上是对JSON的精简,使其更符合人类的阅读习惯。我们来看下语法对比:

在JSON中如果要定义一个"name"属性,必须按照严格的格式要求:

{
    "name": "Tom"
}

以下格式统统错误:

//key没有引号
{
    name: "Tom"
}

//key不是""
{
    'name': "Tom"
}

//value不是""
{
    "name": 'Tom'
}

对应到YAML中,就仅仅只是这么一行,连大括号都省略了:

name: Tom

如果是数组形式,就更明显了:

JSON:

{
    "names": [{ "name": "ruims" }, { "name": "ruidoc" }]
}

YAML:

names:
  - name: ruims
  - name: ruidoc

很明显可以看到YAML在语法上比JSON更加简洁。还有一个更大的优点是YAML支持注释,这使得配置文件更加易读。JSON由于不支持注释,配置一多就会显得非常凌乱。

# 应用名称
name: my_app
# 应用端口
port: 8080

把这个配置文件甩给别人,还会担心他看不懂吗?

YAML语法

YAML语法特点:

  • 大小写敏感
  • 使用缩进代表层级关系
  • # 表示注释

YAML支持的数据结构有三种:

  • 对象:键值对的集合,即字典
  • 数组:一组按次序排列的值
  • 纯量:单个的、不可再分的值

对象

对象键值对使用冒号结构表示,冒号后面要加一个空格。

name: Tom
Job: programmer

数组

数组使用一个短横线加一个空格分隔的多个值表示。

# 这是对象
name: Tom
job: programmer

# 这是数组
hobby:
    - 看书
    - 编程

纯量

YAML支持的纯量有:

  • 字符串
  • 布尔值
  • 整数
  • 浮点数
  • Null
  • 时间
  • 日期

知道以上语法已经足够你写基本的YAML文件了,是不是很简单?

如果需要验证自己写得对不对,可以去这个网站:https://toolgg.com/yaml-validator.html