更新時間:2020-11-27 17:33:34 來源:動力節(jié)點 瀏覽1284次
正如我們所知,XML和JSON 是現(xiàn)今互聯(lián)網(wǎng)中最常用的兩種數(shù)據(jù)交換格式。XML和JSON都是經(jīng)過時間上和技術上的檢驗才得到如今的地位,初學Java的我們在現(xiàn)實開發(fā)中到接觸XML和JSON時很容易混淆,那么XML和JSON到底有何不同呢?本文我們就來對比一下XML和JSON,看看XML和JSON的區(qū)別。
XML格式最早是由W3C 于1996年提出。JSON 格式由Douglas Crockford于2002年提出。雖然這兩種格式的設計目標并不相同,但它們常常用于同一個任務,也就是數(shù)據(jù)交換中。XML 和 JSON 的文檔都很完善,且都同時具有人類可讀性和機器可讀性。不以成敗論英雄,事實上,這兩種格式并沒有哪一個比另一個更強,只是各自適用的領域不同罷了。
我們首先來說XML:
XML和JSON最大的不同在于 XML 可以通過在標簽中添加屬性這一簡單的方法來存儲元數(shù)據(jù)metadata。而使用 JSON 時需要創(chuàng)建一個對象,把元數(shù)據(jù)當作對象的成員來存儲。雖然二者都能達到存儲元數(shù)據(jù)的目的,但在這一情況下 XML 往往是更好的選擇,因為 JSON 的表達形式會讓客戶端程序開發(fā)人員誤以為要將數(shù)據(jù)轉換成一個對象。
XML 的另一個優(yōu)勢在于大多數(shù)的瀏覽器可以把它以具有高可讀性和強組織性的方式展現(xiàn)給用戶。XML的樹形結構讓它易于結構化,瀏覽器也讓用戶可以自行展開或折疊樹中的元素,這簡直就是調(diào)試的福音。
XML 對比 JSON 有一個很重要的優(yōu)勢就是它可以記錄混合內(nèi)容。例如在XML中處理包含結構化標記的字符串時,程序員們只要把帶有標記的文本放在一個標簽內(nèi)就可以了。可因為 JSON 只包含數(shù)據(jù),沒有用于指明標簽的簡單方式,雖然可以使用處理元數(shù)據(jù)的解決方法,但這總有點濫用之嫌。
說完了XML我們再來說JSON:
JSON 自身也有很多優(yōu)點。其中最顯而易見的一點就是 JSON 比 XML 簡潔得多。因為 XML 中需要打開和關閉標簽,而 JSON 使用名稱/值對表示數(shù)據(jù),使用簡單的 { 和 } 來標記對象,[和 ] 來標記數(shù)組,, 來表示數(shù)據(jù)的分隔, : 表示名稱和值的分隔。就算是使用gzip 壓縮,JSON 還是比 XML 要小,而且耗時更少。首先,由于 JSON 文件天生的簡潔性,與包含相同信息的 XML 相比,JSON 總是更小,這意味著更快的傳輸和處理速度。第二,在不考慮大小的情況下,兩組研究 表明使用JSON 執(zhí)行序列化和反序列化的速度顯著優(yōu)于使用 XML。第三,后續(xù)的研究指出 JSON 的處理在 CPU 資源的使用上也優(yōu)于 XML。研究人員發(fā)現(xiàn) JSON 在總體上使用的資源更少,其中更多的 CPU 資源消耗在用戶空間,系統(tǒng)空間消耗的 CPU 資源較少。
JSON 的另一個優(yōu)點在于其對對象和數(shù)組的表述和宿主語言中的數(shù)據(jù)結構相對應,例如對象以及對象組成的數(shù)組等等。雖然 XML 里也能表達這些數(shù)據(jù)結構,也只需調(diào)用一個函數(shù)就能完成解析,而往往需要更多的代碼才能正確的完成 XML 的序列化和反序列化處理。而且 XML 對于人類來說不如 JSON 那么直觀,XML 標準缺乏對象、數(shù)組的標簽的明確定義。當結構化的標記可以替代嵌套的標簽時,JSON 的優(yōu)勢極為突出。JSON 中的花括號和中括號則明確表示了數(shù)據(jù)的結構,當然這一優(yōu)勢也包含前文中的問題,在表示元數(shù)據(jù)時JSON 不如XML準確。雖然XML支持命名空間與前綴,但這不代表 JSON 沒有處理命名沖突的能力。比起 XML 的前綴,它處理命名沖突的方式更簡潔,在程序中的處理也更自然。在 JSON 里,每一個對象都在它自己的命名空間中,因此不同對象內(nèi)的元素名稱可以隨意重復。在大多數(shù)編程語言中,不同的對象中的成員可以包含相同的名字,所以 JSON 根據(jù)對象進行名稱區(qū)分的規(guī)則在處理時更加自然。
事實上,XML和JSON作為Java基礎的內(nèi)容,看完了本文對于XML和JSON對比分析,等于又重新學習了一遍XML和JSON,溫故而知新不是沒有道理的,是不是感覺似乎又學會了新的東西呢,快來本站的Java基礎教程繼續(xù)學習新知識吧!