背景:
本人两种都用过,我感觉习惯了一样能实现需求,都是数据载体,只是各有特色,真的谈不上哪个更好。
xml更像html,说白了更容易让人类看懂,而且看一次就记住格式。
json更像语句,正如其名,js也好,java也好,各种c也好,总之都是类c的形式。
对于我个人而言,json的各种括号和冒号容易眼花,甚至vscode生成的json我都不愿意看。这与个人习惯无关,json确实不如xml那种标记语言更适合阅读。
比较方法:
看网上一个例子:
JSON 实例:
{"employees":[
{ "firstName":"Bill", "lastName":"Gates" },
{ "firstName":"Steve", "lastName":"Jobs" },
{ "firstName":"Elon", "lastName":"Musk" }
]}
不含空格字数134.
XML 实例:
<employees>
<employee>
<firstName>Bill</firstName>
<lastName>Gates</lastName>
</employee>
<employee>
<firstName>Steve</firstName>
<lastName>Jobs</lastName>
</employee>
<employee>
<firstName>Elon</firstName>
<lastName>Musk</lastName>
</employee>
</employees>
不含空格字数244.
于是说xml复杂度高,需要定义标签,其实json也用,只是叫法不同。如果用上面的例子就证明xml更复杂,我认为不公平。再看看下面这样:
{"employees":[
{ "employee":[
{"firstName":"Bill"},
{"lastName":"Gates"}
]},
{ "employee":[
{"firstName":"Steve"},
{"lastName":"Jobs"}
]},
{ "employee":[
{"firstName":"Elon"},
{"lastName":"Musk"}
]}
]}
不含空格字数185.
<employees>
<employee firstName="Bill" lastName="Gates" />
<employee firstName="Steve" lastName="Jobs" />
<employee firstName="Elon" lastName="Musk" />
</employees>
不含空格字数151.
第二种写法显然xml更简洁更易懂,比那么多大括号中括号好懂得多。而这一点,不存在因为我更熟悉xml的原因。我认为json当中,应该废除中括号,才可以和xml比。当然如果废除中括号又违背json的设计初衷。
也许你觉得,都按相同的格式比较,134和151,185和244,还是json简洁是吧?其实在现实应用中,xml的节点名可以简化,而且数量大以后,甚至比json更有优势。请看本文最后部分的例子。
个人主观感受:
我见过vs code生成的json,说真的,看了以后没有学习的欲望。还是上面例子当中那位作者的写法比较清晰。
如果说xml能行的json一定行,那json行的xml也可以。
json类型化?我不认为比字符串有什么优势,作为载体就是要通用。我就是喜欢一切皆字符串的通用性。
json能对象化处理?xml的Document和Element也是对象。
json能通过标签或索引去读写,xml一样可以,子节点多时一样是数组。
解析难度json比xml简单?我不这么认为。json分大括号中括号,xml浑然天成,更简洁易懂。
拼写json比xml简单?我不这么认为。就如手写html一样,我可以直接用字符串拼出xml,而且不需要很强的罗辑思维。从第一天接触xml我就没觉得有多难,反而第一眼见到json开始怀疑自己的智商。
当然我不是来抬杠的,json和xml各有优势,但不是网上一边倒那样。json后来推出的技术很多,人们的想法也先进了很多,或许执行效率上有优势,但是不能用不公平的方法去对比。像上面的例子中,我们都用最简洁或者较复杂的方式来比,确实,如果xml要把尾标签都写全,肯定字数多,但是简洁方式下,xml带尾标签的情况下,字数居然比json少。
其实很简单的道理,json一样有标签,只是叫法不同。xml虽然有</>这样的首尾符号,json也是一样的,{};,[],比xml还多,=和:就算一样吧。
所以,要想强调json的优势,请换个思路,拿字数、复杂度、可读性说事,xml不服。
但是json这种类似js,或者说类似c的写法,我还是很赞同的,确实可以。
另一个例子:
下面我虚心请教一个问题,请json高手帮忙解答。以前在项目中,我们经常用xml作为数据载体,比如存储一次查询结果,里面信息是这样的:
<Data Table='tUsers' UseAs='Save' Fields='fID|fName|fSex|fDepartment|fLogin|fPwd'>
<R Data='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|张三|男|行政部|zhang|123' fState='1'/>
<R Data='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|李四|女|研发部|li|123' fState='0'/>
<R Data='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|王五|男|后勤部|wang|123' fState='-1'/>
<R Data='xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|赵六|女|市场部|zhao|123' />
</Data>
不计空格376.
请问用json怎么写?我自己写的大家看看对不对?或者不好的话,应该怎么改?
{“Data”:
{
"Table":"tUsers",
"UseAs":"Save",
"Field":"fID|fName|fSex|fDepartment|fLogin|fPwd"},
"R":
[
{"Data":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|张三|男|行政部|zhang|123","fState":"1"},
{"Data":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|李四|女|研发部|li|123","fState":"0"},
{"Data":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|王五|男|后勤部|wang|123","fState":"-1"},
{"Data":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx|赵六|女|市场部|zhao|123","fState":""}
]
}}
不计空格413。这是我在实际项目中使用的格式,我觉得还是xml更好看。
题外话:
忘了哪位高人说过,我们写程序,好的可读性,远比性能意义重大。那么对于json和xml,结合上面的例子,各位有何高见?