背景日常工作中,项目编程免不了需要使用配置文件,早期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"}
推荐阅读
- 黑芝麻和燕麦片一起喝
- 燕窝和西洋参一起炖吗?
- 豆角和鸭肉能一起吃吗
- 鸭肉可以和藕一起吃吗
- 翡翠|危料的含义是什么?与翡翠有着怎样的联系?一起来探讨下
- 为什么唐高宗和武则天合葬,武则天死后为什么要和李治葬在一起
- 绿豆和蜂蜜能够一起吃吗
- 绿豆和虾能够一起吃吗
- 榴莲和酸奶能在一起吃吗
- 茶叶和咖啡能一起喝吗?