都说json比xml简洁,其实比较方法不公平

背景:

本人两种都用过,我感觉习惯了一样能实现需求,都是数据载体,只是各有特色,真的谈不上哪个更好。

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,结合上面的例子,各位有何高见?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值