6-数据交换格式

什么是数据交换格式
    json : 是一种轻量级的数据交换格式
    xml : 是一种重量级的数据交换格式(标记语言)
    
目前流行的是http+restfull架构模式javascript

XML使用DTD(document type definition)文档类型定义来组织数据java

什么是JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来讲,由于解析xml比较的复杂,并且须要编写大段的代码,因此客户端和服务器的数据交换格式每每经过JSON来进行交换。web

什么是XML?

它是可扩展标记语言(Extensible Markup Language,简称XML),是一种标记语言。json

XML 全称为可扩展的标记语言。主要用于描述数据和用做配置文件。数组

XML 文档在逻辑上主要由一下 5 个部分组成:服务器

XML 声明:指明所用 XML 的版本、文档的编码、文档的独立性信息restful

文档类型声明:指出 XML 文档所用的 DTD架构

元素:由开始标签、元素内容和结束标签构成框架

注释:以结束,用于对文档中的内容起一个说明做用dom

处理指令:经过处理指令来通知其余应用程序来处理非 XML 格式的数据,格式为

  XML 文档的根元素被称为文档元素,它和在其外部出现的处理指令、注释等做为文档实体的子节点,根元素自己和其内部的子元素也是一棵树。

json和xml的区别:

    Xml是重量级数据交换格式,占宽带比较大。

    JSON是轻量级交换格式,占宽带小。


json应用场景
    1.微服务http+json格式
xml应用场景
    1.配置文件、webservice(soap)http+xml传输、maven、银行老项目
 
JSON分为:
    jsonobjcect : json对象
    jsonarray : json数组
    
    
数据交换格式=报文=参数列表


经常使用JSON解析框架
fastjson(阿里)、gson(谷歌)、jackson(SpringMVC自带)


XML解析方式
Dom4j、Sax
Dom4j与Sax区别
 dom4j不适合大文件的解析,由于它是一会儿将文件加载到内存中,因此有可能出现内存溢出,sax是基于事件来对xml进行解析的,因此他能够解析大文件的xml,也正是由于如此,因此dom4j能够对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性,因此sax常常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操做就用dom4j。


XML和JSON的优缺点对比
    (1).可读性方面。
    JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。
    (2).可扩展性方面。
    XML天生有很好的扩展性,JSON固然也有,没有什么是XML能扩展,JSON不能的。
    (3).编码难度方面。
    XML有丰富的编码工具,好比Dom4j、JDom等,JSON也有json.org提供的工具,可是JSON的编码明显比XML容易许多,即便不借助工具也能写出JSON的代码,但是要写好XML就不太容易了。
    (4).解码难度方面。
    XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。
    (5).流行度方面。
    XML已经被业界普遍的使用,而JSON才刚刚开始,可是在Ajax这个特定的领域,将来的发展必定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。
    (6).解析手段方面。
    JSON和XML一样拥有丰富的解析手段。
    (7).数据体积方面。
    JSON相对于XML来说,数据的体积小,传递的速度更快些。
    (8).数据交互方面。
    JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。
    (9).数据描述方面。
    JSON对数据的描述性比XML较差。
    (10).传输速度方面。
    JSON的速度要远远快于XML。

JSON与XML底层实现原理:      XML和JSON都使用结构化方法来标记数据   (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 来完成这个任务!