最近做的一个项目要使用下配置文件,以前简单使用过XML,json等,现在想看看还有其他好用的配置文件方案没有,查了下win下主要采用的ini格式的配置文件,当然还有YAML方案。
查了下资料,几种配置文件的方案特点如下:
我认为好的配置文件必须包含下面几个因素:
1. 规则足够简单
2. 支持简单的层级关系
3. 允许注释
4. 易于解析
5. 支持嵌套的层级关系
6. 支持类型
json:
由于 JavaScript 的流行,JSON当然成了最适合JavaScript使用的配置文件。JSON可以在JavaScript中使用eval()
或者JSON.parse()
来解析,解析后的内容直接成为JavaScript的内置对象。
但是,其实 JSON 不适合作为配置文件使用。根据上面我定义的好的配置文件条件来看:JSON 规则简单但不宜读(尤其是复杂的没有格式化过的 JSON),不支持注释,也不能使用较为宽松的语法。
例如,下面这种多余的逗号在 JSON 中被认为是错误的语法:
JSON.parse('[1, 2, 3,]') // SyntaxError: JSON.parse: unexpected character at // line 1 column 10 of the JSON data
JSON的确是在网页和 API 中传递信息的一种好格式,而且各种语言都有它的解析库,但但并不适合做配置文件。
INI格式是好的配置文件,还包含优秀的配置文件的一些特性。由于解析简单,我们可以对它做一些扩展以符合我们的需求。
XML
XML 当然是好的配置文件,但它编辑起来太麻烦。即使是有notepad++这类软件的存在,太多的尖括号和嵌套也让手写这种配置文件变得艰难。同样是由于太多的尖括号,让我不愿意阅读它。同样,由于太多的尖括号,导致在版本管理中对不同的文件版本进行比较的时候并不太直观。总之,我不愿意手写这两种配置文件格式,机器生成倒是很好的选择。实际上,一些软件的特定文件格式就是基于 XML 的。
YAML —— 堪称完美
YAML: YAML Ain’t Markup Language 是为了替代 XML 而生。
为什么不是XML呢?因为:
- YAML的可读性好。
- YAML和脚本语言的交互性好。
- YAML使用实现语言的数据类型。
- YAML有一个一致的信息模型。
- YAML易于实现。
上面5条也就是XML不足的地方。同时,YAML也有XML的下列优点:
- YAML可以基于流来处理;
- YAML表达能力强,扩展性好。
总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。
ps: csdn 编辑器真的好难用,下次还是用markdown吧