JSON VS XML:JSON真的比XML好很多吗?

jopen 12年前
   JSON是一个新的人类可读(    <span style="line-height:18px;font-family:Arial, Tahoma, Helvetica, FreeSans, sans-serif;color:#444444;">human readable</span>)的数据格式,在过去几年中已变得非常受欢迎,尤其是在web开发中。    <div>    <br />    </div>    <div>    JSON和 XML非常的相似。它们都试图通过建立一种简单,人类可读的格式存储数据。直到最近,XML被用于任何类型的需要迅速发送一小部分数据的系统中。比如那些从服务器获取信息的API。在大多数情况下,XML做的很好。那么,为什么还需要JSON?    </div>    <div>    <br />    </div>    <div>    JSON在设计时是为Web考虑的,所以它在JavaScript中真的很好用。使用类似 eval()的方法(使用 jQuery会很大提升这个方法的表现),你可以很容易使用JSON中的信息填充一个Web页面。    </div>    <div>    <br />    </div>    <div>    JSON声称相对XML有许多好处,包括:    </div>    <div>     <ul>      <li>容易阅读</li>      <li>解析速度更快</li>      <li>占用空间更少</li>     </ul>    </div>    <div>    尽管容易阅读是很难衡量的一点,但其它两点是很显然的。    </div>    <div>    <br />    </div>    <div>    很容易看出,存储相同的信息JSON确实需要更少的空间。快速浏览一下JSON的网站后,你会发现几个比较这两种格式的例子。从页面上可以很容易的看出:描述同样的信息JSON比XML少占用很多的空间。例如:第一个例子(词汇表结构)存储为XML需要502个字符,而存储为JSON只需345字符(大约少占30%的空间)。    </div>    <div>    <br />    </div>    <div>    对于“解析速度更快”这一点,有点难以测试。对此我写了一个快速测试来看看我能以多快的速度来把一个XML和JSON字符串转化为Java对象。    </div>    <div>    <br />    </div>    <div>    对于XML解析,我使用Java内置的     <a href="/misc/goto?guid=4958348609960059804" rel="nofollow" target="_blank">SAX解析器</a>。SAX解析器允许遍历XML文件,并把XML值赋给对象中适当的字段。这种方法相对JSON解析是比较繁琐的,但不是没有道理。    </div>    <div>    <br />    </div>    <div>    JSON的解析,我使用了GSON库,只需用一行代码就可以很容易地在JSON和java对象之间转换,只需要一个这个类的定义就可以了(如Book类,字段名和JSON中的对应)。不过这使得这个类变量和JSON实例绑定到了一起。一旦类的实例名称或JSON字段名有了变化,将会出现问题。    </div>    <div>    <br />    </div>    <div>    首先,我用相同的数据创建了一个XML和JSON来表示它。下面的XML和JSON文件是使用     <a href="/misc/goto?guid=4958339588259066359" rel="nofollow" target="_blank">Programming Pearls</a>中的信息创建的。    </div>    <div>    <b>XML版本</b>    </div>    <div>    <pre class="brush:xml; toolbar: true; auto-links: false;"><book>       <type>textbook</type>       <pages>256</pages>       <title>Programming Pearls 2nd Edition</title>       <description>The first edition of Programming Pearls was one of the most influential books I read early in my career...</description>       <rating>4.5</rating>       <coverType>paperback</coverType>       <genre>Computer Science</genre>       <author>Jon Bentley</author>       <publisher>Addison-Wesley Professional</publisher>       <copyright>1999</copyright>  </book></pre>     <p></p>    </div>    <div>    <b>JSON版本</b>    </div>    <div>    <pre class="brush:shell; toolbar: true; auto-links: false;">{   "book": {       "type": "textbook",       "pages": "256",       "title": "Programming Pearls 2nd Edition",       "description": "The first edition of Programming Pearls was one of the most influential books I read early in my career...",       "rating": "4.5",       "coverType": "paperback",       "genre": "Computer Science",       "author": "Jon Bentley",       "publisher": "Addison-Wesley Professional",       "copyright": "1999"       }   }</pre>   </div>    <div>    <b> 结果</b>    </div>    <div>    <br />    </div>    <div>     使用上面的XML和JSON文件分别运行解析测试10,000,000次。结果并不令人惊讶,解析和转换JSON成一个Java对象的速度比XML快30%左右。    </div>    <div>     <ul>      <li>JSON平均运行时间:3.647208974029518E-5</li>      <li>XML平均运行时间:5.011537916910817E-5</li>     </ul>    </div>    <div>    我得到的结论是:    </div>    <div>        相对XML,JSON的解析速度提高了30%,占用空间少30%。这些结果似乎和多数开发社区对两种格式的看法一样。换用JSON处理数据在性能上可以有不小的提升,而且还会减少空间的占用。    </div>    <div>    <br />    </div>    <div>    转自:OsChina     <a href="/misc/goto?guid=4958348611487330122" rel="nofollow" target="_blank">原文链接</a>    </div>