JSON、XML、YML、INI这几种数据格式都是通用的,也是常用的。特别是在应用程序配置文件中,几乎都是他们的身影。他们大致上可以相互转换,相互替代,理论上讲他们既可以用于做文件格式,也可以用于做数据传输格式。但是,也有各自的优缺点,所以也有各自的适用场景。本文假定读者对这些数据格式有基础的认识,否则请先百度。
JSON
JSON(百度百科)无疑是目前最流行的数据交换格式,他的特点有:
1. 可以区分数字与字符串
"a": 123 与 "a": "123" 是不同的
2. 支持任意层嵌套
"a": {"b": {"c": 123}}}
3. 信息的表示效率高
表示相同的信息,比XML要短很多
4. 非强制缩进
缩进利于人读, 非缩进信息表示率高
5. 对人友好程度比较差
借助于编辑器的自动格式化和括号匹配提示能一定程度改善对人的友好度
6. 不支持注释
有各种变通的注释形式,但都不是标准
XML
XML(百度百科)是过去很流行的数据交换格式,也是web service默认的数据交换格式。它的特点是:
1. 不能区分数字与字符串,一切都是字符串
<a prop=123 /> 与 <a prop="123" /> 是相同的, 常见 <a>123</a>,但几乎看不到<a>"123"</a>这种表示方式
2. 支持任意层嵌套
3. 信息的表示效率低
4. 非强制缩进
5. 对人读友好,对人写不友好
成对的标签,读起来容易配对。但输入麻烦,效率低。编辑器可以辅助自动输入匹配标签。
其中的CDATA是对人读写友好的特性,可以减少很多转义,转义对人不友好
6. 支持注释
机器对注释无感,但注释是对人友好的一大表现
YML
YML(CSDN)的特点是:
1. 不能区分数字与字符串,一切都是字符串
a:123 与 a:"123" 是相同的
2. 支持任意层嵌套
3. 信息的表示率略低于JSON
因为必须缩进
4. 强制要求缩进
5. 对人读和写都友好
6. 支持注释
INI
INI(百度百科)的特点是:
1. 不能区分数字与字符串,一切都是字符串
2. 固定支持两层数据
这是一个致命的缺点
3. 信息的表示率与YML相当
4. 强制要求缩进
因为不支持任意层嵌套,所以说缩进不太恰当,但它是以回车(或换行)作为数据项的分隔符
5. 对人读和写等价或略低于YML
6. 支持注释
结论
1. 主要是用于机器的对话,略微照顾一下人的读写,这种场景,首选是JSON。如web API。
如果想要更高的数据表示效率,不需要照顾人的读写,可以采用自定义二进制格式。
2. 机器的读写与人的读,并重照顾。这种场景首选是XML。如HTML
3. 主要照顾人的读写,兼顾机器的读写。这种场景首选是YML。如配置文件(config)
4. 至于INI是古老的一种配置文件格式。鉴于其固定两层的数据结构,已不能满足日益复杂的配置文件要求,所以他实际上已经被抛弃,只存在于某些旧系统中。虽然也有改进的方案,效果还是不如yml。
我相信简单才是最美的,所以每当接触一种新的数据格式的时候,内心是抗拒的。我经历了配置文件的格式从INI到XML,到JSON,再到YML的过程。当详细品味新格式的特点,并与现有的格式作对比之后,才慢慢领略到它的先进性,我又会拥抱新格式。若能根据每种格式的特点,用在合适的场景,扬长避短,效果最好。也避免了乱使用而带来的各种转换的麻烦和混乱。愿软件工作者都能用好这些格式。