瞧一瞧看一看

json与xml的区别

PHP 田丰硕 4621℃ 0评论

曾几何时,XML是程序员的宠儿,是数据传输、API、AJAX应用等方面的不二选择,但自从JSON横空出世后,或者你会发觉你身边就有很多人开 始抛弃XML,在他们的心目中,JSON已经完全取代了XML的位置。JSON有很多优势,但也存在缺点,而XML虽然确实存在不少问题,但孰优孰劣,并不是可以依据个人喜好就轻易得出结论的。

JSON(Javascript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于Javascript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, Javascript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 正是因为这样,twitter已经声称他们的流媒体API将不再支持XML,Foursquare则强烈推荐开发者在使用他们的API时选择JSON,因 为他们计划下一代接口只支持JSON。

我们将从下面几个方面来客观比较一下两者

可读性
是否易于在服务端创建数据
是否易于在客户端处理数据
扩展性
调试和故障排除
安全

可读性
两者都具备很好的可读性,但从实际应用出发,个人还是觉得XML文档的可读性无疑会更高,要求你从一大堆的json代码里看出它的结构层次关系还是 相对比较困难的;而且现在很多的IDE工具都可以把XML格式化成易读的结构形式,看起来相当舒服,而json则不然。在这一方面我投XML一票。

是否易于在服务端创建数据
XML已经流行了好多年了,故目前流行的编程语言都已经存在大量的XML数据绑定API去进行创建XML,以java语言为例,你既可以用JAXB,又可以用XmlBeans,又或者dom4j、jdom等去把数据写到xml文件中。而另一方面,json这一方面的API则相对是一个全新的领域,尽管如此,json官方网站还是列出了很多令人印象深刻的各种语言的API,java方面比较著名的有json-lib,此外gson也算一个。在这一方面,虽然json相对于XML并不是望尘莫及,但还是略微逊色一筹,尤其是在复杂的应用方面,XML方面的API已经存在多年,相对来说成熟稳定得多了。

是否易于在客户端处理数据
在客户端,要处理XMLHttpRequest请求返回的json格式响应数据是一件轻而易举的事情,只需要使用javascript的eval函 数就可以实现把json格式的数据转换成javascript对象,然后通过对象的属性去访问值,这就是json最优雅之处,无数人为之着迷。而XML在 这一方面就不是那么的友善了,曾令无数的程序员头痛不已,因为处理XML响应数据,你得通过DOM树,这是非常繁琐且容易出错的工作。这一点,我毫不犹豫 地选择json。

扩展性
可扩展性有助于减少生产者与消费者之间的数据耦合。在AJAX应用里,客户端脚本应该合理地兼容不可知的数据扩展。

毫无疑问,XML是可扩展的,但它的扩展是有局限的,因为如果你要适应扩展的话,那么你的客户端代码不得不作出相应的改动,如以下的客户端解析代码

var xml = xhr.responseXML;
var elements = xml.getElementsByTagName_r("firstName");
var firstNameEl = elements[0];
var lastNameEl = firstNameEl.nextSibling;

如果你在响应xml中结点后增加了这一结点的话,那以上的代码就要作相应 的改变,否则会出错,也就是说,XML的扩展得伴随着解析代码的变更,这可没有什么魔法可言。而json则简单得多,即使你要增加middleName这 一属性,在js客户端依然是通过对象访问属性值即可,而不会引起js上的语法出错之类的错误,导致程序无法执行。

调试和故障排除
这方面需要从服务端和客户端两方面进行考虑,在服务器端,要确保数据是格式良好的和有效的;在客户端,它应该容易调试错误的。

使用XML的话会相对容易地检查数据被发送到客户端是格式良好的和有效的。您还可以使用数据架构(schema)来验证xml的正确性和有效性。使用JSON,这个任务是手动的,并涉及验证响应对象中是否包含正确的属性。

在客户端,要从两者中找到错误都是比较困难的。对于XML,浏览器是完全无法将xml格式化成responseXML;如果对于数据量较少的json数据,还可以通过firebug来发现错误,但对于大数据量的话,那只能靠手工检查了,否则也只能坐以待毙了。

安全性
有人认为,使用json是不安全的,原因是json里可以包含js代码,而客户端中使用eval可以使这些代码执行,而这些代码可能会存在安全隐患。如以下的代码:

function parsePost(data, action) {
    try {
        var postData = eval("(" + data + ")");
        // TO DO1
    } catch (e) {
        // TO DO2
    }
}

上面的代码会导致浏览器把用户的cookie数据提交到一个流氓网站。但出现这种情况的可能只会是开发者故意为之,别人是无法这样做的,但如果是开 发者有意为之的话,那他一样以别的方式来实现把你的cookie数据提交到流氓网站,这与是否使用json无关,所以相对于XML,json是同样的安全 的。

数据交换格式比较之关于轻量级和重量级:
轻量级和重量级是相对来说的,那么XML相对于JSON的重量级体现在哪呢?我想应该体现在解析上,XML目前设计了两种解析方式:DOM和SAX;

DOM是把一个数据交换格式XML看成一个DOM对象,需要把XML文件整个读入内存,这一点上JSON和XML的原理是一样的,但是XML要考虑 父节点和子节点,这一点上JSON的解析难度要小很多,因为JSON构建于两种结构:key/value,键值对的集合;值的有序集合,可理解为数组;

SAX不需要整个读入文档就可以对解析出的内容进行处理,是一种逐步解析的方法。程序也可以随时终止解析。这样,一个大的文档就可以逐步的、一点一点的展现出来,所以SAX适合于大规模的解析。这一点,JSON目前是做不到得。

所以,JSON和XML的轻/重量级的区别在于:JSON只提供整体解析方案,而这种方法只在解析较少的数据时才能起到良好的效果;而XML提供了对大规模数据的逐步解析方案,这种方案很适合于对大量数据的处理。

数据交换格式比较之关于数据格式编码及解析的难度:
在编码上,虽然XML和JSON都有各自的编码工具,但是JSON的编码要比XML简单,即使不借助工具,也可以写出JSON代码,但要写出好的 XML代码就有点困难;与XML一样,JSON也是基于文本的,且它们都使用Unicode编码,且其与数据交换格式XML一样具有可读性。

主观上来看,JSON更为清晰且冗余更少些。JSON网站提供了对JSON语法的严格描述,只是描述较简短。从总体来看,XML比较适合于标记文档,而JSON却更适于进行数据交换处理。

在解析上,在普通的web应用领域,开发者经常为XML的解析伤脑筋,无论是服务器端生成或处理XML,还是客户端用 JavaScript 解析XML,都常常导致复杂的代码,极低的开发效率。

转载请注明:田丰硕个人博客 » json与xml的区别

喜欢 (4)
发表我的评论
取消评论
表情
(48)个小伙伴在吐槽
  1. 华子春xys从百度点进来的,学习学习,呵呵!
    匿名2019-01-29 14:29 回复
  2. 呵呵。学习了。感触良多!
    罗拉2018-09-30 07:07 回复
  3. 认真拜读,好为学徒!
    藏阴套图网2018-09-18 15:59 回复
  4. 转眼已到年中,时间过的真快,忙里偷闲,看看博客,散散心!
    罗拉套图2018-09-10 10:00 回复
  5. 三天两头过来看一看,每次看完都有新体验!
    9482018-08-24 17:21 回复
  6. 这里真心不错,每次来都有新收获!
    大喜2018-08-15 08:09 回复
  7. 到你的博客走一趟,如同阳光洒在我脸上,心里暖洋洋!
    罗拉套图网2018-08-02 08:08 回复
  8. 浏览
    匿名2018-07-27 17:00 回复
  9. 炎热的夏天,看到这样的博客瞬间清凉了许多!
    闺房独自乐2018-07-13 17:51 回复
  10. 从百度点进来的,学习学习,呵呵!
    爱就爱啦2018-07-05 07:56 回复
  11. 生活不止眼前的苟且,还有博客和远方的田野!
    藏金网2018-07-02 15:14 回复
  12. 炎热夏天,闲来无事,拜读博客,消暑解闷!
    9482018-06-21 16:22 回复
  13. 第一次看,感觉还挺新鲜!
    kitty232018-06-17 15:55 回复
  14. 这个博客就像一座宝藏,我是来掘金滴!
    藏金网2018-06-06 17:28 回复
  15. 让人百看不厌的博客,真的不是很多!
    巨根增大网2018-05-31 07:19 回复
  16. 拜读了,多多学习总是好的!
    3566882018-05-26 15:22 回复
  17. 一个博客能让人流连忘返,讲真,靠的是实力!
    siwei2018-05-11 08:25 回复
  18. 大神!受我一拜!
    吊炸天2018-05-07 17:22 回复
  19. 日看博客两三篇,每天生活乐无边!
    增大网2018-04-14 14:57 回复
  20. 为啥我又来,因为这里百看不厌!
    百约不得姐2018-04-12 09:31 回复
  21. 我踩故我在,下次还会来!
    增大网2018-04-02 15:46 回复
  22. 受益匪浅,感触良多!
    增大2018-03-26 14:02 回复
  23. 新年虽已过,好运不打折!
    营销软件2018-03-04 14:06 回复
  24. 鸟儿叫,花儿笑,一年一季春来到!
    趣头条2018-02-07 14:32 回复
  25. 新春佳节到。祝好!祝好!
    屌炸天2018-02-05 17:18 回复
  26. 不错不错!内容感觉好极了!
    xing19822018-02-04 14:54 回复
  27. 我是k 这个是我到新站,推荐一下,谢谢 文件库到访。
    文件库2018-02-03 05:17 回复
  28. 不错!不错!感觉好极了!
    闺房独自乐2018-01-31 14:54 回复
  29. 博客还真是个好东西!
    11638488992018-01-28 00:08 回复
  30. 转眼又是新一年,博主万事如意不差钱!
    民间秘术2018-01-21 21:19 回复
  31. 我有强迫症,看到好文就想顶!
    创业网2018-01-15 09:11 回复
  32. 毫无疑问,这个是要支持的!
    套图网2018-01-08 15:01 回复
  33. 新年好呀,新年好呀,祝福博主新年好!
    八达网2018-01-02 18:34 回复
  34. :mrgreen: 来学习
    匿名2018-01-01 21:15 回复
  35. 我也想做这类型网站,不过评论没眉目
    匿名2018-01-01 21:13 回复
    • 这个回复怎么实现,我是懵的
      匿名2018-01-01 21:14 回复
  36. 确实6
    匿名2018-01-01 21:12 回复
  37. 博客大好,让人忘不了!
  38. 很不错,学习了
    匿名2017-12-26 18:05 回复
  39. 有博客的静态模板吗。
    匿名2017-12-26 15:22 回复
  40. 这样的博客让人禁不住一天来几次!
    促美优品2017-12-18 16:06 回复
  41. 这样精彩的博客越来越少咯!
    中青看点2017-12-15 14:04 回复
  42. 文章不错支持一下
    匿名2017-12-13 11:55 回复
  43. 一言不发岂能证明我来过了?!
    中医秘方2017-12-10 20:54 回复
  44. 山高路远,好人平安!
    健康网2017-12-08 14:26 回复
  45. 一天不来访,浑身上下痒!
    小吃技术2017-11-27 11:36 回复
  46. 冬天虽已来临,祝您四季如春!
    创业网2017-11-21 10:08 回复
  47. 潜心学习,认真拜读!
    三五创业网2017-11-16 17:11 回复