name="google_esf" id="google_esf" src="https://googleads.g.doubleclick.net/pagead/html/r20160511/r20160513/zrt_lookup.html" style="display: none;" data-ad-client="ca-pub-8371924687350116"> name="google_ads_frame1" width="200" height="200" id="google_ads_frame1" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-8371924687350116&output=html&h=200&slotname=3344578513&adk=4141039346&w=200&lmt=1462672486&ea=0&flash=11.9.900.170&url=http%3A%2F%2Fwww.php100.com%2Fhtml%2Fitnews%2Fit%2F2012%2F0719%2F10707.html&wgl=0&dt=1463548260110&idt=499&shv=r20160511&cbv=r20160513&saldr=sb&correlator=2921041957751&frm=20&ga_vid=503818824.1463548261&ga_sid=1463548261&ga_hid=147126599&ga_fc=0&pv=2&icsg=64858&dssz=12&mdo=0&mso=8&u_tz=480&u_his=0&u_java=1&u_h=900&u_w=1440&u_ah=860&u_aw=1440&u_cd=32&u_nplug=0&u_nmime=0&dff=%E5%AE%8B%E4%BD%93&dfs=12&adx=251&ady=495&biw=1419&bih=748&eid=20040014&oid=3&ref=http%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DFuK7mOwVz9gteLOiMcxYZpIC-aKUy7A4o6UxN93Vf2_fXrV8IOXgF9ryMSurRZE_nE5DWgiRHjgQaleou_F7BZMcwqxwgG_bMkUlqfJzab3%26wd%3D%26eqid%3D82d61779000368ad00000003573bf8eb&rx=0&eae=4&fc=16&pc=0&docm=8&brdim=0%2C86%2C%2C%2C1440%2C%2C%2C%2C%2C&vis=0&rsz=%7C%7Cl%7C&abl=CS&ppjl=u1&pfx=0&fu=8&bc=0&ifi=1&dtd=515" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="true" allowtransparency="">

  JSON是一个新的人类可读( human readable)的数据格式,在过去几年中已变得非常受欢迎,尤其是在web开发中。

  JSON和 XML非常的相似。它们都试图通过建立一种简单,人类可读的格式存储数据。直到最近,XML被用于任何类型的需要迅速发送一小部分数据的系统中。比如那些从服务器获取信息的API。在大多数情况下,XML做的很好。那么,为什么还需要JSON?

  JSON在设计时是为Web考虑的,所以它在JavaScript中真的很好用。使用类似 eval()的方法(使用 jQuery会很大提升这个方法的表现),你可以很容易使用JSON中的信息填充一个Web页面。

  JSON声称相对XML有许多好处,包括:

  容易阅读;解析速度更快;占用空间更少

  尽管容易阅读是很难衡量的一点,但其它两点是很显然的。

  很容易看出,存储相同的信息JSON确实需要更少的空间。快速浏览一下JSON的网站后,你会发现几个比较这两种格式的例子。从页面上可以很容易的看出:描述同样的信息JSON比XML少占用很多的空间。例如:第一个例子(词汇表结构)存储为XML需要502个字符,而存储为JSON只需345字符(大约少占30%的空间)。

  对于“解析速度更快”这一点,有点难以测试。对此我写了一个快速测试来看看我能以多快的速度来把一个XML和JSON字符串转化为Java对象。

  对于XML解析,我使用Java内置的 SAX解析器。SAX解析器允许遍历XML文件,并把XML值赋给对象中适当的字段。这种方法相对JSON解析是比较繁琐的,但不是没有道理。

  JSON的解析,我使用了GSON库,只需用一行代码就可以很容易地在JSON和java对象之间转换,只需要一个这个类的定义就可以了(如Book类,字段名和JSON中的对应)。不过这使得这个类变量和JSON实例绑定到了一起。一旦类的实例名称或JSON字段名有了变化,将会出现问题。

  首先,我用相同的数据创建了一个XML和JSON来表示它。下面的XML和JSON文件是使用Programming Pearls中的信息创建的。

  XML版本

<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>

 

  JSON版本


 "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"
     } 
 }

 

  结果

  使用上面的XML和JSON文件分别运行解析测试10,000,000次。结果并不令人惊讶,解析和转换JSON成一个Java对象的速度比XML快30%左右。

  JSON平均运行时间:3.647208974029518E-5

  XML平均运行时间:5.011537916910817E-5

  我得到的结论是:

  相对XML,JSON的解析速度提高了30%,占用空间少30%。这些结果似乎和多数开发社区对两种格式的看法一样。换用JSON处理数据在性能上可以有不小的提升,而且还会减少空间的占用。