告别xml,一起yaml,让配置文件更简洁流畅

背景日常工作中,项目编程免不了需要使用配置文件,早期yaml出现之前,大部分配置文件采用xml形式,但是以xml格式储存的数据要比以其他格式(如json、yaml)储存占有的空间要大得多,因为它除了要保存原始数据外还需要保存元数据进行描述 。不管你是否相信,笔者曾经在项目中看到xml文件中大量冗余的标签,真的是眼花缭乱,幸运的是,当看见yaml的那一刻,笔者真实地感受到上帝来解救处于水深火热中的那一帮经常与配置文件打交道的程序员了 。本文笔者将根据在项目中对yaml的应用简单介绍yaml这样一种让爱程序员爱不释手的数据串行化格式 。
简介与json、xml一样,yaml也是一种通用的数据串行化格式,其设计目标就是方便开发人员的读写,yaml可以表示对象、数组、纯量三种数据格式 。
yaml规范

  • 大小写敏感
  • 使用缩进表示层级
  • 缩进的空格数不重要,但是相同层级的元素左侧需要对齐
对象键值对组合,又称哈希,对象的一组键值对用冒号分割,注意冒号后面必须有空格
debug: true转换为JAVAScript如下
{"debug":true}也可以将所有键值对写在一个行内对象
db: {user: root, password: pass123}转换为JavaScript如下
{"db":{"user":"root", "password":"pass123"}}数组一组按次序排列的值,又称序列,数组的每个元素都以连词线“-”开头,连词线“-”后面必须有空格,如下
fruits: - Apple - pear - banana转换为JavaScript后如下
{"fruits": ["apple", "pear", "banana"]}也可以表示多维数组,如下
fruitsGroup: -- apple- banana -- pear转换为JavaScript如下
{"fruitsGroup": [["apple", "banana"], ["pear"]]}与对象一样,数组也可以使用行内表示法,如下
fruits: [apple, banana, pear]转换为JavaScript如下
{"fruits":["apple", "banana", "pear"]}复合结构对象和数组可以结合使用,构成复合结构 。如对象数组,每个对象的第一个属性以连词线“-”开头,连词线“-”后面必须要有空格
fruits: - name: applecolor: red - name: bananacolor: yellow转换成JavaScript如下
{"fruits":[{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]}对象数组也可以使用行内表示法,如下
fruits: [{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]转换为JavaScript如下
{"fruits":[{"name":"apple", "color":"red"}, {"name":"banana", "color":"yellow"}]}纯量纯量是单独的、最基本的、不可再分的值,包括数值类型(整数、浮点数)、布尔类型、日期时间类型、null类型,字符串类型 。
数值直接以字面量的形式表示,如下
weight: 1.0转换为JavaScript如下
{"weight": 1.0}布尔值包括true与false,如下
enabled: truedisabled: false转换为JavaScript如下
{"enabled":true, "disabled":false}null用~表示,如下
name: ~转换为JavaScript如下
{"name": null}日期、时间采用ISO8601格式,如下
date: 2021-06-18T18:00:00+08:00date1: 2020-06-18转换为JavaScript如下
{"date": new Date('2021-06-18T18:00:00+08:00'), "date1":new Date('2020-06-18')}字符串字符串默认不使用引号,如下
profile: test如果字符串中包含特殊字符或空格,需要放在引号之中,其中单引号不会对特殊字符转义,双引号会对特殊字符转义,如下
c1: '这是一个n测试'c2: "这是一个n测试"转换为JavaScript如下
{"c1":"这是一个\n测试", "c2":"这是一个n测试"}单引号之中如果还有单引号,需要连续使用两个单引号转义,如下
content: 'that''s all right'转换为JavaScript如下
{"content": "that's all right"}


推荐阅读