偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

XML與JSON優(yōu)劣對比

開發(fā) 前端
XML 與 JSON 相比有很多優(yōu)點。二者間最大的不同在于 XML 可以通過在標簽中添加屬性這一簡單的方法來存儲元數據metadata。而使用 JSON 時需要創(chuàng)建一個對象,把元數據當作對象的成員來存儲。


[[256892]]

簡介

XML 和 JSON 是現今互聯(lián)網中最常用的兩種數據交換格式。XML 格式由 W3C 于 1996 年提出。JSON 格式由 Douglas Crockford 于 2002 年提出。雖然這兩種格式的設計目標并不相同,但它們常常用于同一個任務,也就是數據交換中。XML 和 JSON 的文檔都很完善(RFC 7159[1]、RFC 4825[2]),且都同時具有人類可讀性human-readable和機器可讀性machine-readable。這兩種格式并沒有哪一個比另一個更強,只是各自適用的領域不用。(LCTT 譯注:W3C 是互聯(lián)網聯(lián)盟[3],制定了各種 Web 相關的標準,如 HTML、CSS 等。Douglas Crockford 除了制定了 JSON 格式,還致力于改進 JavaScript,開發(fā)了 JavaScript 相關工具 JSLint[4] 和 JSMin[5])

XML 的優(yōu)點

XML 與 JSON 相比有很多優(yōu)點。二者間最大的不同在于 XML 可以通過在標簽中添加屬性這一簡單的方法來存儲元數據metadata。而使用 JSON 時需要創(chuàng)建一個對象,把元數據當作對象的成員來存儲。雖然二者都能達到存儲元數據的目的,但在這一情況下 XML 往往是更好的選擇,因為 JSON 的表達形式會讓客戶端程序開發(fā)人員誤以為要將數據轉換成一個對象。舉個例子,如果你的 C++ 程序需要使用 JSON 格式發(fā)送一個附帶元數據的整型數據,需要創(chuàng)建一個對象,用對象中的一個名稱/值對name/value pair來記錄整型數據的值,再為每一個附帶的屬性添加一個名稱/值對。接收到這個 JSON 的程序在讀取后很可能把它當成一個對象,可事實并不是這樣。雖然這是使用 JSON 傳遞元數據的一種變通方法,但他違背了 JSON 的核心理念:“JSON 的結構與常規(guī)的程序語言中的結構相對應,而無需修改。JSON’s structures look like conventional programming language structures. No restructuring is necessary.”1

雖然稍后我會說這也是 XML 的一個缺點,但 XML 中對命名沖突、前綴prefix的處理機制賦予了它 JSON 所不具備的能力。程序員們可以通過前綴來把統(tǒng)一名稱給予兩個不同的實體。2 當不同的實體在客戶端中使用的名稱相同時,這一特性會非常有用。

XML 的另一個優(yōu)勢在于大多數的瀏覽器可以把它以具有高可讀性和強組織性的方式highly readable and organized way展現給用戶。XML 的樹形結構讓它易于結構化,瀏覽器也讓用戶可以自行展開或折疊樹中的元素,這簡直就是調試的福音。

XML 對比 JSON 有一個很重要的優(yōu)勢就是它可以記錄混合內容mixed content。例如在 XML 中處理包含結構化標記的字符串時,程序員們只要把帶有標記的文本放在一個標簽內就可以了??梢驗?JSON 只包含數據,沒有用于指明標簽的簡單方式,雖然可以使用處理元數據的解決方法,但這總有點濫用之嫌。

JSON 的優(yōu)點

JSON 自身也有很多優(yōu)點。其中最顯而易見的一點就是 JSON 比 XML 簡潔得多。因為 XML 中需要打開和關閉標簽,而 JSON 使用名稱/值對表示數據,使用簡單的 { 和 } 來標記對象,[和 ] 來標記數組,, 來表示數據的分隔,: 表示名稱和值的分隔。就算是使用 gzip 壓縮,JSON 還是比 XML 要小,而且耗時更少。3 正如 Sumaray 和 Makki 在實驗中指出的那樣,JSON 在很多方面都比 XML 更具優(yōu)勢,得出同樣結果的還有 Nurseitov、Paulson、Reynolds 和 Izurieta。首先,由于 JSON 文件天生的簡潔性,與包含相同信息的 XML 相比,JSON 總是更小,這意味著更快的傳輸和處理速度。第二,在不考慮大小的情況下,兩組研究 4 5 表明使用 JSON 執(zhí)行序列化和反序列化的速度顯著優(yōu)于使用 XML。第三,后續(xù)的研究指出 JSON 的處理在 CPU 資源的使用上也優(yōu)于 XML。研究人員發(fā)現 JSON 在總體上使用的資源更少,其中更多的 CPU 資源消耗在用戶空間,系統(tǒng)空間消耗的 CPU 資源較少。這一實驗是在 RedHat 的設備上進行的,RedHat 表示更傾向于在用戶空間使用 CPU 資源。6 不出意外,Sumaray 和 Makki 在研究里還說明了在移動設備上 JSON 的性能也優(yōu)于 XML。7 這是有道理的,因為 JSON 消耗的資源更少,而移動設備的性能也更弱。

JSON 的另一個優(yōu)點在于其對對象和數組的表述和宿主語言host language中的數據結構相對應,例如對象object、記錄record、結構體struct、字典dictionary、哈希表hash table、鍵值列表keyed list還有數組array、向量vector、列表list,以及對象組成的數組等等。8 雖然 XML 里也能表達這些數據結構,也只需調用一個函數就能完成解析,而往往需要更多的代碼才能正確的完成 XML 的序列化和反序列化處理。而且 XML 對于人類來說不如 JSON 那么直觀,XML 標準缺乏對象、數組的標簽的明確定義。當結構化的標記可以替代嵌套的標簽時,JSON 的優(yōu)勢極為突出。JSON 中的花括號和中括號則明確表示了數據的結構,當然這一優(yōu)勢也包含前文中的問題,在表示元數據時 JSON 不如 XML 準確。

雖然 XML 支持命名空間namespace與前綴prefix,但這不代表 JSON 沒有處理命名沖突的能力。比起 XML 的前綴,它處理命名沖突的方式更簡潔,在程序中的處理也更自然。在 JSON 里,每一個對象都在它自己的命名空間中,因此不同對象內的元素名稱可以隨意重復。在大多數編程語言中,不同的對象中的成員可以包含相同的名字,所以 JSON 根據對象進行名稱區(qū)分的規(guī)則在處理時更加自然。

也許 JSON 比 XML 更優(yōu)的部分是因為 JSON 是 JavaScript 的子集,所以在 JavaScript 代碼中對它的解析或封裝都非常的自然。雖然這看起來對 JavaScript 程序非常有用,而其他程序則不能直接從中獲益,可實際上這一問題已經被很好的解決了?,F在 JSON 的網站的列表上展示了 64 種不同語言的 175 個工具,它們都實現了處理 JSON 所需的功能。雖然我不能評價大多數工具的質量,但它們的存在明確了開發(fā)者社區(qū)擁抱 JSON 這一現象,而且它們切實簡化了在不同平臺使用 JSON 的難度。

二者的動機

簡單地說,XML 的目標是標記文檔。這和 JSON 的目標想去甚遠,所以只要用得到 XML 的地方就盡管用。它使用樹形的結構和包含語義的文本來表達混合內容以實現這一目標。在 XML 中可以表示數據的結構,但這并不是它的長處。

JSON 的目標是用于數據交換的一種結構化表示。它直接使用對象、數組、數字、字符串、布爾值這些元素來達成這一目標。這完全不同于文檔標記語言。正如上面說的那樣,JSON 沒有原生支持混合內容mixed content的記錄。

軟件

這些主流的開放 API 僅提供 XML:亞馬遜產品廣告 APIAmazon Product Advertising API。

這些主流 API 僅提供 JSON:臉書圖 APIFacebook Graph API、谷歌地圖 APIGoogle Maps API、推特 APITwitter API、AccuWeather API、Pinterest API、Reddit API、Foursquare API。

這些主流 API 同時提供 XML 和 JSON:谷歌云存儲Google Cloud Storage、領英 APILinkedin API、Flickr API。

根據可編程網絡Programmable Web 9 的數據,最流行的 10 個 API 中只有一個是僅提供 XML 且不支持 JSON 的。其他的要么同時支持 XML 和 JSON,要么只支持 JSON。這表明了大多數應用開發(fā)者都更傾向于使用支持 JSON 的 API,原因大概是 JSON 更快的處理速度與良好口碑,加之與 XML 相比更加輕量。此外,大多數 API 只是傳遞數據而非文檔,所以 JSON 更加合適。例如 Facebook 的重點在于用戶的交流與帖子,谷歌地圖則主要處理坐標和地圖信息,AccuWeather 就只傳遞天氣數據??傊?,雖然不能說天氣 API 在使用時究竟是 JSON 用的多還是 XML 用的多,但是趨勢明確偏向了 JSON。10 11

這些主流的桌面軟件仍然只是用 XML:Microsoft Word、Apache OpenOffice、LibraOffice。

因為這些軟件需要考慮引用、格式、存儲等等,所以比起 JSON,XML 優(yōu)勢更大。另外,這三款程序都支持混合內容,而 JSON 在這一點上做得并不如 XML 好。舉例說明,當用戶使用 Microsoft Word 編輯一篇論文時,用戶需要使用不同的文字字形、文字大小、文字顏色、頁邊距、段落格式等,而 XML 結構化的組織形式與標簽屬性生來就是為了表達這些信息的。

這些主流的數據庫支持 XML:IBM DB2、Microsoft SQL Server、Oracle Database、PostgresSQL、BaseX、eXistDB、MarkLogic、MySQL。

這些是支持 JSON 的主流數據庫:MongoDB、CouchDB、eXistDB、Elastisearch、BaseX、MarkLogic、OrientDB、Oracle Database、PostgreSQL、Riak。

在很長一段時間里,SQL 和關系型數據庫統(tǒng)治著整個數據庫市場。像甲骨文Oracle和微軟Microsoft這樣的軟件巨頭都提供這類數據庫,然而近幾年 NoSQL 數據庫正逐步受到開發(fā)者的青睞。也許是正巧碰上了 JSON 的普及,大多數 NoSQL 數據庫都支持 JSON,像 MongoDB、CouchDB 和 Riak 這樣的數據庫甚至使用 JSON 來存儲數據。這些數據庫有兩個重要的特性是它們適用于現代網站:一是它們與關系型數據庫相比更容易擴展more scalable;二是它們設計的目標就是 web 運行所需的核心組件。12 由于 JSON 更加輕量,又是 JavaScript 的子集,所以很適合 NoSQL 數據庫,并且讓這兩個品質更容易實現。此外,許多舊的關系型數據庫增加了 JSON 支持,例如 Oracle Database 和 PostgreSQL。由于 XML 與 JSON 間的轉換比較麻煩,所以大多數開發(fā)者會直接在他們的應用里使用 JSON,因此開發(fā)數據庫的公司才有支持 JSON 的理由。(LCTT 譯注:NoSQL 是對不同于傳統(tǒng)的關系數據庫的數據庫管理系統(tǒng)的統(tǒng)稱。參考來源[6]) 13

未來

對互聯(lián)網的種種變革中,最讓人期待的便是物聯(lián)網Internet of Things(IoT)。這會給互聯(lián)網帶來大量計算機之外的設備,例如手表、溫度計、電視、冰箱等等。這一勢頭的發(fā)展良好,預期在不久的將來迎來爆發(fā)式的增長。據估計,到 2020 年時會有 260 億 到 2000 億的物聯(lián)網設備被接入互聯(lián)網。14 15 幾乎所有的物聯(lián)網設備都是小型設備,因此性能比筆記本或臺式電腦要弱很多,而且大多數都是嵌入式系統(tǒng)。因此,當它們需要與互聯(lián)網上的系統(tǒng)交換數據時,更輕量、更快速的 JSON 自然比 XML 更受青睞。16 受益于 JSON 在 web 上的快速普及,與 XML 相比,這些新的物聯(lián)網設備更有可能從使用 JSON 中受益。這是一個典型的梅特卡夫定律的例子,無論是 XML 還是 JSON,抑或是什么其他全新的格式,現存的設備和新的設備都會從支持最廣泛使用的格式中受益。

Node.js 是一款服務器端的 JavaScript 框架,隨著她的誕生與快速成長,與 MongoDB 等 NoSQL 數據庫一起,讓全棧使用 JavaScript 開發(fā)成為可能。這些都預示著 JSON 光明的未來,這些軟件的出現讓 JSON 運用在全棧開發(fā)的每一個環(huán)節(jié)成為可能,這將使應用更加輕量,響應更快。這也是任何應用的追求之一,所以,全棧使用 JavaScript 的趨勢在不久的未來都不會消退。17

此外,另一個應用開發(fā)的趨勢是從 SOAP 轉向 REST。18 19 20 XML 和 JSON 都可以用于 REST,可 SOAP 只能使用 XML。

從這些趨勢中可以推斷,JSON 的發(fā)展將統(tǒng)一 Web 的信息交換格式,XML 的使用率將繼續(xù)降低。雖然不應該把 JSON 吹過頭了,因為 XML 在 Web 中的使用依舊很廣,而且它還是 SOAP 的唯一選擇,可考慮到 SOAP 到 REST 的遷移,NoSQL 數據庫和全棧 JavaScript 的興起,JSON 卓越的性能,我相信 JSON 很快就會在 Web 開發(fā)中超過 XML。至于其他領域,XML 比 JSON 更好的情況并不多。

角注

1. Introducing JSON[7]

2. XML Tutorial[8]

3. JSON vs. XML: Some hard numbers about verbosity[9]

4. Comparison of JSON and XML Data Interchange Formats: A Case Study[10]

5. A comparison of data serialization formats for optimal efficiency on a mobile platform[11]

6. Comparison of JSON and XML Data Interchange Formats: A Case Study[10]

7. A comparison of data serialization formats for optimal efficiency on a mobile platform[11]

8. Introducing JSON[7]

9. Most Popular APIs: At Least One Will Surprise You[12]

10. Why JSON will continue to push XML out of the picture[13]

11. Thousands of APIs Paint a Bright Future for the Web[14]

12. Why JSON will continue to push XML out of the picture[13]

13. How JSON sparked NoSQL – and will return to the RDBMS fold[15]

14. A Simple Explanation Of ‘The Internet Of Things’[16]

15. Proofpoint Uncovers Internet of Things (IoT) Cyberattack[17]

16. Why JSON will continue to push XML out of the picture[13]

17. Why JSON will continue to push XML out of the picture[13]

18. Thousands of APIs Paint a Bright Future for the Web[14]

19. 3,000 Web APIs: Trends From A Quickly Growing Directory[18]

20. How REST replaced SOAP on the Web: What it means to you[19]

責任編輯:龐桂玉 來源: Linux
相關推薦

2010-07-20 16:16:21

SDH

2014-08-12 10:15:42

數據格式JSONXML

2019-04-10 10:32:16

CORSNginx反向代理

2023-06-27 13:51:07

FPGA數據中心程序

2018-10-26 13:30:32

AP組網無線

2019-12-26 16:21:59

ReactJSAngularJSVue.js

2014-04-04 16:52:22

2010-01-08 13:42:21

JSON VS XML

2010-01-06 18:33:56

JSON與XML

2016-08-31 14:15:28

R語言Excel數據分析

2025-07-02 09:56:07

2011-09-22 09:55:40

投影儀評測

2022-08-10 07:05:35

vscodePyCharm開發(fā)工具

2015-03-23 09:33:28

綜合布線光纜

2009-08-21 14:07:05

Flex與Silver

2012-03-08 21:49:51

iPad

2018-05-10 14:20:02

javaC++語言

2018-06-14 10:44:59

MySQLMyISAMInnoDB

2024-10-06 12:35:50

2010-05-21 16:36:09

GoogleCode
點贊
收藏

51CTO技術棧公眾號