《分析JSON、XML的区别,JSON、XML解析方式的底层是如何实现的(延伸实现原理)》
(一)JSON与XML的区别:
(1)可读性方面:基本相同,XML的可读性比较好;
(2)可扩展性方面:都具有良好的扩展性;
(3)编码难度方面:相对而言,JSON的编码比较容易;
(4)解码难度:JSON的解码难度基本为零,XML需要考虑子节点和父节点;
(5)数据体积方面:JSON相对于XML来讲,数据体积小,传递的速度比较快;
(6)数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互;
(7)数据描述方面:XML对数据描述性比较好;
(8)传输速度方面:JSON的速度远远快于XML。
(二)JSON与XML底层实现原理:
(1)JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}、[]、:等进行区分,{}号表示字典,[]号表示数组,:号是字典的键和值的分水岭,最终仍是将JSON转化为字典,只不过字典中的值可能是“字典、数组或者字符串而已”。
(2)XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析;DOM采用的是树形结构的方式访问XML文档,而SAX采用的是事件模型;DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历,使用DOM解析器的时候需要处理整个XML文档,所以对内存和性能的要求比较高;SAX在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法指定的标签已经找到,SAX对内存的要求通常会比较低,因为他让开发人员自己来决定所要处理的tag,特别是当开发人员只需要处理文档中所包含部分数据时,SAX这种扩展能力得到了更好的体现。
(三)延伸DOM与SAX的区别:
(1)SAX处理的优点非常类似于流媒体的优点;分析能够立即开始,而不是等待所有的数据被处理;而且由于应用程序只是在读取数据的时候检查数据,因此不需要将数据存储在内存中;对于大型文档来说是一个巨大的优点;事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到 满足时停止解析。一般来说,SAX 还比它的替代者 DOM 快许多。另一方面,由于应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中往后移是不可能的。
(2)DOM 以及广义的基于树的处理具有几个优点;首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改;它还可以在任何时候在树中上下 导航,而不是像 SAX 那样是一次性的处理;DOM 使用起来也要简单得多;另一方面,在内存中构造这样的树涉及大量的开销。大型文件完全占用系统内存容量的情况并不鲜见。此外,创建一棵 DOM 树可能是一个缓慢的过程。
(四)选择DOM还是选择SAX,这取决于下面几个因素:
(1)应用程序的目的:如果打算对数据作出更改并将它输出为 XML,那么在大多数情况下,DOM 是适当的选择。并不是说使用 SAX 就不能更改数据,但是该过程要复杂得多,因为您必须对数据的一份拷贝而不是对数据本身作出更改。
(2)数据容量: 对于大型文件,SAX 是更好的选择;数据将如何使用:如果只有数据中的少量部分会被使用,那么使用 SAX 来将该部分数据提取到应用程序中可能更好。 另一方面,如果您知道自己以后会回头引用已处理过的大量信息,那么 SAX 也许不是恰当的选择。
(3)对速度的需要: SAX 实现通常要比 DOM 实现更快。
(五)特别注意:SAX 和 DOM 不是相互排斥的,记住这点很重要。您可以使用 DOM 来创建 SAX 事件流,也可以使用 SAX 来创建 DOM 树。事实上,用于创建 DOM 树的大多数解析器实际上都使用 SAX 来完成这个任务!
(六)XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较:
(1)XML数据样式:
<?xml version="1.0" encoding="utf-8" ?> <country> <name>中国</name> <province> <name>山东</name> <citys> <city>济南</city> <city>青岛</city> </citys> </province> <province> <name>广东</name> <citys> <city>广州</city> <city>深圳</city> <city>珠海</city> </citys> </province> <province> <name>台湾</name> <citys> <city>台北</city> <city>高雄</city> </citys> </province> <province> <name>新疆</name> <citys> <city>乌鲁木齐</city> </citys> </province> </country>
(2)JSON数据样式:
var country = { name: "中国", provinces: [ { name: "山东", citys: { city: ["济南", "青岛"]} }, { name: "广东", citys: { city: ["广州", "深圳", "珠海"]} }, { name: "台湾", citys: { city: ["台北", "高雄"]} }, { name: "新疆", citys: { city: ["乌鲁木齐"]} } ] }
(以上便是对JSON、XML相关介绍和理解,还希望大家相互补充共同进步)