數據交換格式

什麼是數據交換格式
    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 來完成這個任務!    

相關文章
相關標籤/搜索