配置文件选型——为什么要用YAML()
开宗明义: YAML是个好格式!
作为配置文件,YAML应该是对人眼读取和编辑最友好的了,当然扩展性呢,就比JSON差了点,更不如XML,不过有舍有得么,一般情况下够用了。
优点
直接上例子,看一下对比效果就知道了。
JSON
同一组配置,用JSON写是这个样子:
{
"id": 100,
"name": "测试项目",
"version": "3.1",
"steps": [
{
"id": 18,
"action": "Prepare",
"expects": [
{
"id": 238,
"result": "GOOD"
},
{
"id": 239,
"result": "PERFECT"
}
]
}
]
}
虽然格式化以后可读性也不错,但编辑起来就费劲了。这还仅仅是三层嵌套,括号对齐就有点吓人。
XML 如果用XML表示,会更加复杂,像下面这段,在没有语法高亮的情况下,读起来对人是一种折磨:
100 : 100
测试项目
3.1 18 ,
Prepare,
238
GOOD 239
PERFECT
要想手敲这段代码,更是容易出错:各种标签不封闭,嵌套层级混乱之类的。(想象一下远程登录到服务器,用VIM或Nano打开它的样子)。
YAML 当YAML到来以后,世界一下子清爽了:
id: 100
name: "测试项目"
version: "3.1"
steps:
- id: 18
action: "Prepare"
expects:
- id: 238,
result: GOOD
- id: 239,
result: PERFECT
是不是无比简洁? 仅仅字符数,JSON就比YAML多了75%,XML更是多出320%!究其原因,主要是YAML直接使用了对人眼友好的return和tab作为数据分隔符,这样一来,编辑起来简直跟Markdown文档差不多,堪称程序员福利啊。
缺点 当然这世上没有银弹,YAML也有它固有的缺点。
- 首先开头提到过,它的扩展性差——这一点上XML优势明显,它每个标签有attribute,可以任意定义“元数据”,比如示例中的datatype,这是YAML和JSON的共同弱项;如果实在需要,就只能把元数据也放在数据项中,然后用特殊的字符前缀来标识(类似Python对象中的__dict__)
- 其次它对格式要求很严格,没法以“紧凑”形式表达:比如不需要人读的时候,我们可以把JSON串压缩在一行,尽可能去除所有空格,这个YAML显然做不到。
- 还有就是各种语言中,对YAML的支持都还不够成熟,尤其是序列化/反序列化部分,现有的库都很不方便。
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 广角叙述|广角叙述 展众生群像——试析鲁迅《示众》的展示艺术