從這些趨勢中可以推斷,JSON 的發(fā)展將統(tǒng)一 Web 的信息交換格式,XML 的使用率將繼續(xù)降低。我相信 JSON 很快就會在 Web 開發(fā)中超過 XML。至于其他領(lǐng)域,XML 比 JSON 更好的情況并不多。
-- Tom Strassner
簡介
XML 和 JSON 是現(xiàn)今互聯(lián)網(wǎng)中最常用的兩種數(shù)據(jù)交換格式。XML 格式由 W3C 于 1996 年提出。JSON 格式由 Douglas Crockford 于 2002 年提出。雖然這兩種格式的設(shè)計目標并不相同,但它們常常用于同一個任務(wù),也就是數(shù)據(jù)交換中。XML 和 JSON 的文檔都很完善( RFC 7159 、 RFC 4825 ),且都同時具有 人類可讀性(human-readable)和 機器可讀性(machine-readable)。這兩種格式并沒有哪一個比另一個更強,只是各自適用的領(lǐng)域不用。(LCTT 譯注:W3C 是 互聯(lián)網(wǎng)聯(lián)盟 ,制定了各種 Web 相關(guān)的標準,如 html、css 等。Douglas Crockford 除了制定了 JSON 格式,還致力于改進 JAVAScript,開發(fā)了 JavaScript 相關(guān)工具 JSLint 和 JSMin )
XML 的優(yōu)點
XML 與 JSON 相比有很多優(yōu)點。二者間最大的不同在于 XML 可以通過在標簽中添加屬性這一簡單的方法來存儲 元數(shù)據(jù)(metadata)。而使用 JSON 時需要創(chuàng)建一個對象,把元數(shù)據(jù)當作對象的成員來存儲。雖然二者都能達到存儲元數(shù)據(jù)的目的,但在這一情況下 XML 往往是更好的選擇,因為 JSON 的表達形式會讓客戶端程序開發(fā)人員誤以為要將數(shù)據(jù)轉(zhuǎn)換成一個對象。舉個例子,如果你的 C++ 程序需要使用 JSON 格式發(fā)送一個附帶元數(shù)據(jù)的整型數(shù)據(jù),需要創(chuàng)建一個對象,用對象中的一個 名稱/值對(name/value pair)來記錄整型數(shù)據(jù)的值,再為每一個附帶的屬性添加一個名稱/值對。接收到這個 JSON 的程序在讀取后很可能把它當成一個對象,可事實并不是這樣。雖然這是使用 JSON 傳遞元數(shù)據(jù)的一種變通方法,但他違背了 JSON 的核心理念:“ JSON 的結(jié)構(gòu)與常規(guī)的程序語言中的結(jié)構(gòu)相對應(yīng),而無需修改。(JSON’s structures look like conventional programming language structures. No restructuring is necessary.)” 1
雖然稍后我會說這也是 XML 的一個缺點,但 XML 中對命名沖突、 前綴(prefix)的處理機制賦予了它 JSON 所不具備的能力。程序員們可以通過前綴來把統(tǒng)一名稱給予兩個不同的實體。 2 當不同的實體在客戶端中使用的名稱相同時,這一特性會非常有用。
XML 的另一個優(yōu)勢在于大多數(shù)的瀏覽器可以把它以 具有高可讀性和強組織性的方式(highly readable and organized way)展現(xiàn)給用戶。XML 的樹形結(jié)構(gòu)讓它易于結(jié)構(gòu)化,瀏覽器也讓用戶可以自行展開或折疊樹中的元素,這簡直就是調(diào)試的福音。
XML 對比 JSON 有一個很重要的優(yōu)勢就是它可以記錄 混合內(nèi)容(mixed content)。例如在 XML 中處理包含結(jié)構(gòu)化標記的字符串時,程序員們只要把帶有標記的文本放在一個標簽內(nèi)就可以了。可因為 JSON 只包含數(shù)據(jù),沒有用于指明標簽的簡單方式,雖然可以使用處理元數(shù)據(jù)的解決方法,但這總有點濫用之嫌。
JSON 的優(yōu)點
JSON 自身也有很多優(yōu)點。其中最顯而易見的一點就是 JSON 比 XML 簡潔得多。因為 XML 中需要打開和關(guān)閉標簽,而 JSON 使用名稱/值對表示數(shù)據(jù),使用簡單的 { 和 } 來標記對象,[ 和 ] 來標記數(shù)組,, 來表示數(shù)據(jù)的分隔,: 表示名稱和值的分隔。就算是使用 gzip 壓縮,JSON 還是比 XML 要小,而且耗時更少。 3 正如 Sumaray 和 Makki 在實驗中指出的那樣,JSON 在很多方面都比 XML 更具優(yōu)勢,得出同樣結(jié)果的還有 Nurseitov、Paulson、Reynolds 和 Izurieta。首先,由于 JSON 文件天生的簡潔性,與包含相同信息的 XML 相比,JSON 總是更小,這意味著更快的傳輸和處理速度。第二,在不考慮大小的情況下,兩組研究 45 表明使用 JSON 執(zhí)行序列化和反序列化的速度顯著優(yōu)于使用 XML。第三,后續(xù)的研究指出 JSON 的處理在 CPU 資源的使用上也優(yōu)于 XML。研究人員發(fā)現(xiàn) JSON 在總體上使用的資源更少,其中更多的 CPU 資源消耗在用戶空間,系統(tǒng)空間消耗的 CPU 資源較少。這一實驗是在 RedHat 的設(shè)備上進行的,RedHat 表示更傾向于在用戶空間使用 CPU 資源。 6 不出意外,Sumaray 和 Makki 在研究里還說明了在移動設(shè)備上 JSON 的性能也優(yōu)于 XML。 7 這是有道理的,因為 JSON 消耗的資源更少,而移動設(shè)備的性能也更弱。
JSON 的另一個優(yōu)點在于其對對象和數(shù)組的表述和 宿主語言(host language)中的數(shù)據(jù)結(jié)構(gòu)相對應(yīng),例如 對象(object)、 記錄(record)、 結(jié)構(gòu)體(struct)、 字典(dictionary)、 哈希表(hash table)、 鍵值列表(keyed list)還有 數(shù)組(array)、 向量(vector)、 列表(list),以及對象組成的數(shù)組等等。 8 雖然 XML 里也能表達這些數(shù)據(jù)結(jié)構(gòu),也只需調(diào)用一個函數(shù)就能完成解析,而往往需要更多的代碼才能正確的完成 XML 的序列化和反序列化處理。而且 XML 對于人類來說不如 JSON 那么直觀,XML 標準缺乏對象、數(shù)組的標簽的明確定義。當結(jié)構(gòu)化的標記可以替代嵌套的標簽時,JSON 的優(yōu)勢極為突出。JSON 中的花括號和中括號則明確表示了數(shù)據(jù)的結(jié)構(gòu),當然這一優(yōu)勢也包含前文中的問題,在表示元數(shù)據(jù)時 JSON 不如 XML 準確。
雖然 XML 支持 命名空間(namespace)與 前綴(prefix),但這不代表 JSON 沒有處理命名沖突的能力。比起 XML 的前綴,它處理命名沖突的方式更簡潔,在程序中的處理也更自然。在 JSON 里,每一個對象都在它自己的命名空間中,因此不同對象內(nèi)的元素名稱可以隨意重復(fù)。在大多數(shù)編程語言中,不同的對象中的成員可以包含相同的名字,所以 JSON 根據(jù)對象進行名稱區(qū)分的規(guī)則在處理時更加自然。
也許 JSON 比 XML 更優(yōu)的部分是因為 JSON 是 JavaScript 的子集,所以在 JavaScript 代碼中對它的解析或封裝都非常的自然。雖然這看起來對 JavaScript 程序非常有用,而其他程序則不能直接從中獲益,可實際上這一問題已經(jīng)被很好的解決了。現(xiàn)在 JSON 的網(wǎng)站的列表上展示了 64 種不同語言的 175 個工具,它們都實現(xiàn)了處理 JSON 所需的功能。雖然我不能評價大多數(shù)工具的質(zhì)量,但它們的存在明確了開發(fā)者社區(qū)擁抱 JSON 這一現(xiàn)象,而且它們切實簡化了在不同平臺使用 JSON 的難度。
二者的動機
簡單地說,XML 的目標是標記文檔。這和 JSON 的目標想去甚遠,所以只要用得到 XML 的地方就盡管用。它使用樹形的結(jié)構(gòu)和包含語義的文本來表達混合內(nèi)容以實現(xiàn)這一目標。在 XML 中可以表示數(shù)據(jù)的結(jié)構(gòu),但這并不是它的長處。
JSON 的目標是用于數(shù)據(jù)交換的一種結(jié)構(gòu)化表示。它直接使用對象、數(shù)組、數(shù)字、字符串、布爾值這些元素來達成這一目標。這完全不同于文檔標記語言。正如上面說的那樣,JSON 沒有原生支持 混合內(nèi)容(mixed content)的記錄。
軟件
這些主流的開放 API 僅提供 XML: 亞馬遜產(chǎn)品廣告 API(Amazon Product Advertising API)。
這些主流 API 僅提供 JSON: 臉書圖 API(Facebook Graph API)、 谷歌地圖 API(google Maps API)、 推特 API(Twitter API)、AccuWeather API、Pinterest API、Reddit API、Foursquare API。
這些主流 API 同時提供 XML 和 JSON: 谷歌云存儲(Google Cloud Storage)、 領(lǐng)英 API(Linkedin API)、Flickr API。
根據(jù) 可編程網(wǎng)絡(luò)(Programmable Web) 9 的數(shù)據(jù),最流行的 10 個 API 中只有一個是僅提供 XML 且不支持 JSON 的。其他的要么同時支持 XML 和 JSON,要么只支持 JSON。這表明了大多數(shù)應(yīng)用開發(fā)者都更傾向于使用支持 JSON 的 API,原因大概是 JSON 更快的處理速度與良好口碑,加之與 XML 相比更加輕量。此外,大多數(shù) API 只是傳遞數(shù)據(jù)而非文檔,所以 JSON 更加合適。例如 Facebook 的重點在于用戶的交流與帖子,谷歌地圖則主要處理坐標和地圖信息,AccuWeather 就只傳遞天氣數(shù)據(jù)。總之,雖然不能說天氣 API 在使用時究竟是 JSON 用的多還是 XML 用的多,但是趨勢明確偏向了 JSON。 10 11
這些主流的桌面軟件仍然只是用 XML:Microsoft word、Apache Openoffice、LibraOffice。
因為這些軟件需要考慮引用、格式、存儲等等,所以比起 JSON,XML 優(yōu)勢更大。另外,這三款程序都支持混合內(nèi)容,而 JSON 在這一點上做得并不如 XML 好。舉例說明,當用戶使用 Microsoft Word 編輯一篇論文時,用戶需要使用不同的文字字形、文字大小、文字顏色、頁邊距、段落格式等,而 XML 結(jié)構(gòu)化的組織形式與標簽屬性生來就是為了表達這些信息的。
這些主流的數(shù)據(jù)庫支持 XML:IBM DB2、Microsoft SQL Server、Oracle Database、PostgresSQL、BaseX、eXistDB、MarkLogic、MySQL。
這些是支持 JSON 的主流數(shù)據(jù)庫:MongoDB、CouchDB、eXistDB、Elastisearch、BaseX、MarkLogic、OrientDB、Oracle Database、PostgreSQL、Riak。
在很長一段時間里,SQL 和關(guān)系型數(shù)據(jù)庫統(tǒng)治著整個數(shù)據(jù)庫市場。像 甲骨文(Oracle)和 微軟(Microsoft)這樣的軟件巨頭都提供這類數(shù)據(jù)庫,然而近幾年 NoSQL 數(shù)據(jù)庫正逐步受到開發(fā)者的青睞。也許是正巧碰上了 JSON 的普及,大多數(shù) NoSQL 數(shù)據(jù)庫都支持 JSON,像 MongoDB、CouchDB 和 Riak 這樣的數(shù)據(jù)庫甚至使用 JSON 來存儲數(shù)據(jù)。這些數(shù)據(jù)庫有兩個重要的特性是它們適用于現(xiàn)代網(wǎng)站:一是它們與關(guān)系型數(shù)據(jù)庫相比 更容易擴展(more scalable);二是它們設(shè)計的目標就是 web 運行所需的核心組件。 12 由于 JSON 更加輕量,又是 JavaScript 的子集,所以很適合 NoSQL 數(shù)據(jù)庫,并且讓這兩個品質(zhì)更容易實現(xiàn)。此外,許多舊的關(guān)系型數(shù)據(jù)庫增加了 JSON 支持,例如 Oracle Database 和 PostgreSQL。由于 XML 與 JSON 間的轉(zhuǎn)換比較麻煩,所以大多數(shù)開發(fā)者會直接在他們的應(yīng)用里使用 JSON,因此開發(fā)數(shù)據(jù)庫的公司才有支持 JSON 的理由。(LCTT 譯注:NoSQL 是對不同于傳統(tǒng)的關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。 參考來源 ) 13
未來
對互聯(lián)網(wǎng)的種種變革中,最讓人期待的便是 物聯(lián)網(wǎng)(Internet of Things)(IoT)。這會給互聯(lián)網(wǎng)帶來大量計算機之外的設(shè)備,例如手表、溫度計、電視、冰箱等等。這一勢頭的發(fā)展良好,預(yù)期在不久的將來迎來爆發(fā)式的增長。據(jù)估計,到 2020 年時會有 260 億 到 2000 億的物聯(lián)網(wǎng)設(shè)備被接入互聯(lián)網(wǎng)。 14 15 幾乎所有的物聯(lián)網(wǎng)設(shè)備都是小型設(shè)備,因此性能比筆記本或臺式電腦要弱很多,而且大多數(shù)都是嵌入式系統(tǒng)。因此,當它們需要與互聯(lián)網(wǎng)上的系統(tǒng)交換數(shù)據(jù)時,更輕量、更快速的 JSON 自然比 XML 更受青睞。 16 受益于 JSON 在 web 上的快速普及,與 XML 相比,這些新的物聯(lián)網(wǎng)設(shè)備更有可能從使用 JSON 中受益。這是一個典型的梅特卡夫定律的例子,無論是 XML 還是 JSON,抑或是什么其他全新的格式,現(xiàn)存的設(shè)備和新的設(shè)備都會從支持最廣泛使用的格式中受益。
Node.js 是一款服務(wù)器端的 JavaScript 框架,隨著她的誕生與快速成長,與 MongoDB 等 NoSQL 數(shù)據(jù)庫一起,讓全棧使用 JavaScript 開發(fā)成為可能。這些都預(yù)示著 JSON 光明的未來,這些軟件的出現(xiàn)讓 JSON 運用在全棧開發(fā)的每一個環(huán)節(jié)成為可能,這將使應(yīng)用更加輕量,響應(yīng)更快。這也是任何應(yīng)用的追求之一,所以,全棧使用 JavaScript 的趨勢在不久的未來都不會消退。 17
此外,另一個應(yīng)用開發(fā)的趨勢是從 SOAP 轉(zhuǎn)向 REST。 18 19 20 XML 和 JSON 都可以用于 REST,可 SOAP 只能使用 XML。
從這些趨勢中可以推斷,JSON 的發(fā)展將統(tǒng)一 Web 的信息交換格式,XML 的使用率將繼續(xù)降低。雖然不應(yīng)該把 JSON 吹過頭了,因為 XML 在 Web 中的使用依舊很廣,而且它還是 SOAP 的唯一選擇,可考慮到 SOAP 到 REST 的遷移,NoSQL 數(shù)據(jù)庫和全棧 JavaScript 的興起,JSON 卓越的性能,我相信 JSON 很快就會在 Web 開發(fā)中超過 XML。至于其他領(lǐng)域,XML 比 JSON 更好的情況并不多。
角注
Introducing JSON ?
XML Tutorial ?
JSON vs. XML: Some hard numbers about verbosity ?
Comparison of JSON and XML Data Interchange Formats: A Case Study ?
A comparison of data serialization formats for optimal efficiency on a mobile platform ?
Comparison of JSON and XML Data Interchange Formats: A Case Study ?
A comparison of data serialization formats for optimal efficiency on a mobile platform ?
Introducing JSON ?
Most Popular APIs: At Least One Will Surprise You ?
Why JSON will continue to push XML out of the picture ?
Thousands of APIs Paint a Bright Future for the Web ?
Why JSON will continue to push XML out of the picture ?
How JSON sparked NoSQL – and will return to the RDBMS fold ?
A Simple Explanation Of ‘The Internet Of Things’ ?
Proofpoint Uncovers Internet of Things (IoT) Cyberattack ?
Why JSON will continue to push XML out of the picture ?
Why JSON will continue to push XML out of the picture ?
Thousands of APIs Paint a Bright Future for the Web ?
3,000 Web APIs: Trends From A Quickly Growing Directory ?
How REST replaced SOAP on the Web: What it means to you ?
via: https://www.cs.tufts.edu/comp/150IDS/final_papers/tstras01.1/FinalReport/FinalReport.html
作者: TOM STRASSNER 選題: lujun9972 譯者: wwhio 校對: wxy
本文由 LCTT 原創(chuàng)編譯, linux中國 榮譽推出
XML 與 JSON 優(yōu)劣對比
網(wǎng)友整理
注冊時間:
網(wǎng)站:5 個 小程序:0 個 文章:12 篇
-
51998
網(wǎng)站
- 12
小程序
-
1030137
文章
-
747
會員
文章分類
熱門網(wǎng)站
- 各百科-專業(yè)百科問答知識名網(wǎng)站 m.geelcn.com
- 免費軟件,綠色軟件園,手機軟件下載,熱門游戲下載中心-中當網(wǎng) m.deelcn.com
- 魔扣科技 www.ylptlb.cn
- 體育新聞_國際體育資訊_全球體育賽事-中名網(wǎng) www.feelcn.com/tiyu/tiyuxinwen/
- 食品安全_健康飲食_舌尖上的安全-中名網(wǎng) www.feelcn.com/shenghuo/shipinanquan/
- 中合網(wǎng) www.heelcn.com
- 中當網(wǎng) www.deelcn.com
- 魔扣網(wǎng)站維護代運營 www.ylptlb.cn/tg
- 中合網(wǎng)-健康養(yǎng)生知識科普名站 m.heelcn.com
- 各百科 www.geelcn.com
最新入駐小程序
數(shù)獨大挑戰(zhàn)2018-06-03
數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9
答題星2018-06-03
您可以通過答題星輕松地創(chuàng)建試卷
全階人生考試2018-06-03
各種考試題,題庫,初中,高中,大學四六
運動步數(shù)有氧達人2018-06-03
記錄運動步數(shù),積累氧氣值。還可偷
每日養(yǎng)生app2018-06-03
每日養(yǎng)生,天天健康
體育訓練成績評定2018-06-03
通用課目體育訓練成績評定
熱門文章
- 民以食為天 離線人臉識別助力打造智慧食堂 08-20
- 青桔單車發(fā)布3款新車 已進入150個城市 08-13
- 民間大神用Win7毛玻璃UI風格改造Win10:情懷滿滿 08-06
- 網(wǎng)站標題是否可以修改?怎么改不影響網(wǎng)站權(quán)重? 11-19
- 關(guān)于網(wǎng)站標題和正文的匹配度分析 09-29
- 從滾石、華納到環(huán)球,三個關(guān)鍵詞讀懂網(wǎng)易云為何成版權(quán)方最愛 08-12
- 天眼被注冊為煙草商標,中國控煙協(xié)會要求嚴查 08-13
- 深圳實現(xiàn)5G獨立組網(wǎng)全覆蓋 已累計建設(shè)5G基站超4.6萬個 08-17
- 滴滴App內(nèi)嵌買車服務(wù) 已在十余城上線 08-06
- 關(guān)鍵詞的密度要結(jié)合頁面版式來調(diào)整 11-28