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