JSON、XML、YML等数据格式的对比
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的过程。当详细品味新格式的特点,并与现有的格式作对比之后,才慢慢领略到它的先进性,我又会拥抱新格式。若能根据每种格式的特点,用在合适的场景,扬长避短,效果最好。也避免了乱使用而带来的各种转换的麻烦和混乱。愿软件工作者都能用好这些格式。
博主简介:佘焕敏(shé),洋名 Billy Sir。
关注编程基础技术,并致力于研究软件的自动化生成。 对编程规范化、面向对象的极致使用也有着浓厚的兴趣。 同时非常希望能够写程序到65岁。
只有工匠精神,才能把常人觉得单调乏味的代码,当作作品雕刻成艺术品。
重点:这里几乎每一篇文章,都是我认真创作的,凝结了心血。写作从来都不是一件容易的事,对从小语文不好的我而言,是难上加难。而且,你发现没有,文中没有广告。这篇文章介绍了为什么要写这些文章。
![微信赞赏码](https://img2022.cnblogs.com/blog/33556/202211/33556-20221101085333455-1717538163.png)