深入了解 JSON 與 XML,第 1 部分:每個標準的歷史

已發表: 2022-03-11
相關:深入了解 JSON 與 XML,第 2 部分:兩者的優缺點

從桌面到 Web 和移動設備,我們今天使用的幾乎所有計算機應用程序都依賴於兩種主要消息標準之一:JSON 和 XML。 今天,JSON 是最廣泛使用的格式,但它在過去五年內才超過 XML。 快速在線搜索“JSON 與 XML”將帶來無數文章和博客文章,比較這兩種標準,並逐漸擴大偏見,讚揚 JSON 的簡單性並批評 XML 的冗長。 許多文章堅持認為 JSON 優於 XML,因為它具有簡潔的語義,並且認為 XML 是過去低效且令人困惑的標準。 乍一看,JSON 似乎是最流行的——那麼 JSON 是否比 XML 更好? “JSON 與 XML”之戰表面上可能是 JSON,但在深度上,它的內容遠不止表面上所見。

在本文的第 1 部分中,我們將:

  1. 仔細研究 Web 的歷史,了解 XML 和 JSON 的最初用途。
  2. 考慮近年來軟件趨勢的演變,以確定 JSON 比 XML 更受歡迎的原因。

JSON 和 XML 的歷史

為了揭示 JSON 比 XML 更受歡迎的原因,讓我們探討一下 Web 的歷史以及它從 Web 1.0 到 Web 2.0 的演變如何影響開發趨勢。

Web 1.0:HTML

1990 年代初是 Web 1.0 的黎明。 HTML 於 1991 年推出,並被大學、企業和政府組織廣泛採用為網絡語言。 HTML 來自 SGML,即“標准通用標記語言”,由 IBM 在 1970 年代發明。 除了大規模採用之外,HTML 還得到了大規模適應——嵌入了擴展以支持多媒體、動畫、在線應用程序、電子商務等。 作為 SGML 的衍生物,HTML 缺乏嚴格的規範來限制公司自由擴展它以滿足超出原始概念的要求。 網景和微軟之間對最受歡迎的網絡瀏覽器的競爭取得了迅速的進展,但也導致了標準的無情分裂。 激烈的競爭導致了“分歧災難”,因為兩家公司對 HTML 的增強導致瀏覽器支持自己獨特的 HTML 版本。 由於開發人員努力為瀏覽器編寫可互操作的代碼,這種分歧災難成為 Web 應用程序的一個巨大問題。

Web 1.1:XML + HTML = XHTML

在 1990 年代後期,包括 Jon Bosak、Tim Bray、James Clark 等在內的一群人提出了 XML:“可擴展標記語言”。 與 SGML 一樣,XML 本身不是一種標記語言,而是一種用於定義標記語言的規範。 XML 是從 SGML 演變而來的——旨在提供一種定義和實施結構化內容的方法。 XML 語言被認為是“計算的聖杯” 1 ,它致力於“解決不同系統之間的通用數據交換問題”(Charles Goldfarb 博士) 2 。 為了取代 HTML 的持續碎片化,萬維網委員會 (W3C) 的成立是為了促進業界在採用新的萬維網標準方面的兼容性和協議。 3 W3C 著手將 HTML 重塑為 XML 應用程序,其結果是 XHTML。

XHTML 是一項引起人們對 XML 關注的重大舉措,但它只是 XML 的一小部分。

XML 為業界提供了一種方法,可以通過嚴格的語義為任何應用程序指定自定義標記語言。 由於關鍵字是“嚴格語義”,XML 定義了一個標準,可以斷言任何 XML 文檔、任何 XML 子語言中數據的完整性。 對於開發與不同系統交互的分佈式企業應用程序的軟件公司來說,可以斷言其數據完整性的標記語言非常重要。 通過使用 XML 定義結構化內容,公司利用該技術的特性與任何平台進行互操作,強制每個數據交換的數據完整性,並系統地降低其係統的軟件風險。 對於行業而言,XML 提供了一種存儲、通信和驗證任何類型數據的技術,其形式是任何平台上的應用程序都可以輕鬆讀取和處理。 對於 HTML,XML 承諾解決“分歧災難”。

Java 和 .NET

在 2000 年代初期,Web 由兩家公司管理:Sun 和 Microsoft。 當時,編程語言的格局嚴重偏向服務器端。 Web 應用程序的通用架構依賴於服務器在後端渲染 HTML 頁面以交付給瀏覽器。 這種方法突出了後端技術,進而普及了領先的後端平台:Java 和 C#.NET。 由 Sun Microsystems 開發的 Java 引領了新一代的面向對象編程語言,該語言以其新穎的“一次編寫,隨處運行” 4方法解決了跨架構問題。 Microsoft 緊隨其後的是 .NET、C# 和公共語言運行時 (CLR),並將 XML 視為解決數據互操作性難題的選擇方法。 微軟成為 XML 最偉大的倡導者,該公司選擇 XML 作為其著名的 .NET 計劃的一個組成部分。 被宣傳為“XML Web 服務平台”, 5 .NET 應用程序被設計為使用 XML 與其他平台進行通信。 XML 被選為 Microsoft 的數據交換標準,並被集成到其旗艦服務器產品中,例如 SQL Server 和 Exchange。

Web 1.2:AJAX

將預渲染的 HTML 頁面交付給瀏覽器是不可擴展的,Web 需要一個替代方案。 由於每個用戶操作都需要從服務器加載一個新頁面,隨著越來越多的人膨脹網絡,進程負載和帶寬消耗成為一個問題。

Netscape 和 Microsoft 努力通過異步內容交付解決這個問題:ActiveX 和 JavaScript。 1998 年,Microsoft Outlook Web Access 團隊開發了 ActiveX 6背後的概念,後來被 Mozilla、Safari、Opera 和其他瀏覽器用 JavaScript 實現為XMLHttpRequest對象。

AJAX 誕生於 Microsoft 的 ActiveX 和 Netscape 的 JavaScript。

術語 AJAX(“異步 JavaScript 和 XML”的縮寫)代表了廣泛的 Web 技術,可用於實現與後台服務器通信的 Web 應用程序,而無需重新加載頁面。 在創造術語 AJAX 的文章中, 7 8 Jesse James Garrett 概述了主要概念:

  1. 用於演示的 HTML(或 XHTML)和 CSS。
  2. 用於動態顯示數據並與之交互的文檔對像模型 (DOM)。
  3. XML 用於數據交換,XSLT 用於數據操作。
  4. 用於異步通信的XMLHttpRequest對象。
  5. JavaScript 將這些技術結合在一起。

通過證明異步內容交付可以減少服務器負載並節省大量帶寬,AJAX 改變了遊戲規則。 將XMLHttpRequest引入瀏覽器允許開發人員在前端實現更複雜的邏輯。 谷歌在 2004 年和 2005 年通過 Gmail 和谷歌地圖廣泛部署了符合標準的跨瀏覽器AJAX。9而且,2004 年 10 月,Kayak.com 的公開測試版是 AJAX 的第一個大規模電子商務使用之一。 10

Web 2.0:單頁應用程序

採用 AJAX 作為 Web 應用程序的可擴展架構導致了 Web 2.0 的出現:單頁應用程序 (SPA)。 11 SPA 不會為每次用戶交互重新加載整個頁面,而是動態地重寫瀏覽器中的當前頁面。 除了顯著減少服務器負載和帶寬消耗外,SPA 方法還允許 Web 應用程序類似於桌面應用程序,因為在用戶交互過程中提供了無縫和不間斷的體驗。

2002 年 4 月,Stuart Morris 在 slashdotslash.com 12上編寫了首批 SPA 之一,同年晚些時候,Lucas Birdeau、Kevin Hakman、Michael Peachey 和 Evan Yeh 在美國專利 8,136,109 中描述了單頁應用程序實現。 13該專利描述了使用 JavaScript 來顯示用戶界面、運行應用程序邏輯以及與 Web 服務器通信的 Web 瀏覽器。

Google 的 Gmail、Google 地圖和 Kayak 的公開測試版開啟了 Web 應用程序開發的新時代。 啟用了 AJAX 的瀏覽器使開發人員能夠為 Web 編寫豐富的應用程序。 JavaScript 的簡單語義使任何水平的程序員都可以進行應用程序開發。 進入軟件開發的門檻大大降低,世界各地的個人開發人員開始貢獻自己的庫和框架。 流行的庫,如 jQuery,規範了來自不同製造商的瀏覽器的 AJAX 行為,進一步推動了 AJAX 革命。

JSON 的興起

2001 年 4 月,Douglas Crockford 和 Chip Morningstar 從晨星灣區車庫的一台計算機發送了第一條 JSON 消息。 Crockford 和 Morningstar 早在“AJAX”一詞被創造出來之前就試圖構建 AJAX 應用程序,但瀏覽器對他們試圖實現的目標的支持並不好。 他們希望在頁面加載後將數據傳遞給他們的應用程序,但還沒有找到一種方法來允許它在所有瀏覽器上工作。

2001 年,AJAX 的開發才剛剛開始,在 Internet Explorer 5 和 Netscape 4 中還沒有XMLHttpRequest對象的可互操作形式。因此,Crockford 和 Morningstar 使用了在這兩種瀏覽器中都可以工作的不同方法。

第一條 JSON 消息如下所示:

 <html><head><script> document.domain = 'fudco'; parent.session.receive( { to: "session," do: "test," text: "Hello world" } ) </script></head></html>

該消息實際上是一個包含一些 JavaScript 的 HTML 文檔,並且只有一小部分消息類似於我們今天所知道的 JSON。 Crockford 和 Morningstar 能夠通過將<iframe>指向一個 URL 來異步加載數據,該 URL 將返回一個類似於上面的 HTML 文檔。 當收到響應時,HTML 中的 JavaScript 將運行,並且通過避開阻止子窗口訪問父窗口的瀏覽器保護,將對象字面量傳遞回應用程序的主框架。 這種基於幀的技術,有時稱為“隱藏幀技術”,在XMLHttpRequest廣泛實現之前的 90 年代後期普遍使用。 14

這種方法吸引了開發人員,因為它提供了跨所有瀏覽器的互操作性。 由於消息只是 JavaScript,它不需要任何特殊的解析。 以這種方式使用 JavaScript 的想法非常簡單,以至於 Crockford 自己說他不是第一個這樣做的人——他聲稱早在 1996 年,Netscape 就有人使用 JavaScript 來傳遞信息。 15

Crockford 和 Morningstar 意識到他們有一些可以用於各種應用程序的東西。 他們將格式命名為 JSON,即“JavaScript Object Notation”的縮寫。 他們開始向客戶推銷它,但很快發現許多人不願意在缺乏官方規範的新技術上冒險。 所以克羅克福德決定寫一個。 2002 年,Crockford 購買了 JSON.org 域名,並提供了 JSON 語法和解析器的參考實現。 該網站仍在運行,儘管它現在包含一個指向 2013 年批准的 JSON ECMA 標準的顯著鏈接。 16建立該網站後,Crockford 沒有做更多的推廣 JSON,但很快發現人們提交了針對不同編程語言的 JSON 解析器實現。 JSON 的起源顯然與 JavaScript 相關,但很明顯 JSON 非常適合在任意語言之間交換數據。

AJAX 中的 JSON

2005 年,Jesse James Garrett 在一篇博文中創造了“AJAX”一詞,他強調 AJAX 不是任何一種新技術,而是“幾種技術,每一種都以自己的方式蓬勃發展,以強大的新方式結合在一起。” 16他的博客文章繼續描述了開發人員如何利用 JavaScript 和XMLHttpRequest構建比典型網頁更具響應性和狀態的新型應用程序。 他指出 Gmail、Google Maps 和 Flickr 是使用 AJAX 技術的網站示例。 儘管“AJAX”中的“X”代表 XML,但 Garrett 指出 JSON 是一種完全可以接受的替代方案。 他寫道:“XML 是最完善的將數據傳入和傳出 AJAX 客戶端的方式,但沒有理由不能使用 JavaScript 對象表示法或任何類似的結構化數據方式來實現相同的效果。” 17

JavaScript 和 JSON 明確地意味著在一起。 JSON 的語義直接映射到 JavaScript,使其成為該語言的本機數據交換格式。 開發人員很快發現 JSON 在 JavaScript 中更易於使用,許多人開始更喜歡它而不是 XML。

隨著 JSON 引起了博客圈的注意,JSON 的擴散已經開始。

為什麼 JSON 比 XML 更受歡迎

JSON 是 JavaScript 應用程序中數據的本機格式。 隨著過去十年 JavaScript 的普及,創建的 JSON 消息比任何其他數據格式都多。 用 JavaScript 編寫應用程序幾乎要求使用 JSON 進行數據交換。 其他格式也是可能的,但它們比 JSON 需要更多的努力。 隨著 JavaScript 在應用程序開發中越來越受歡迎,JSON 緊隨其後,成為易於使用且原生集成的數據交換格式。

就博客圈而言,關於 JavaScript(以及 JSON)的文章、示例和教程比任何其他編程平台都多。

Web 的歷史和演進路徑在 JSON 的普及中發揮了重要作用。 根據 Stack Overflow 的說法,現在關於 JSON 的問題比其他數據交換格式要多。 18

替代文本

根據 Google 趨勢,可以看到類似的配置文件比較了 JSON 和 XML 的搜索興趣。 19

替代文本

JavaScript 的普及是否意味著 JSON 優於 XML?

開發人員社區堅持認為 JSON 比 XML 更受歡迎,因為它具有簡潔的聲明範圍和簡單的語義。 Douglas Crockford 本人在 JSON.org 上總結了 JSON 的一些優勢:“JSON 對人類和機器來說都更容易理解,因為它的語法極少且結構可預測。” 20 XML 的其他批評者將注意力集中在 XML 作為“尖括號稅”的冗長。 21 XML 格式要求每個開始標籤與一個結束標籤相匹配,從而產生冗餘信息,在未壓縮時可能使 XML 文檔明顯大於等效的 JSON 文檔。 而且,也許更重要的是,開發人員說:“它還使 XML 文檔更難閱讀。” 22

JSON 由於其簡單性和簡潔的語義而廣受讚譽,而 XML 由於其冗長且看似過於復雜而被標記為過去的過時標準。 在比較 JSON 和 XML 時,許多文章和博客文章提供了有限的視角,導致讀者相信 JSON 是 XML 的替代品。 不是這種情況!

文章和博客文章提供的有限視角導致讀者認為 XML 已過時,許多人沒有意識到可以幫助他們改進軟件架構和適應變化以及系統地降低軟件風險的強大功能。

JSON 比 XML 更受歡迎,因為 JavaScript 作為當今使用最廣泛的語言佔據主導地位。 隨著 JavaScript 在過去十年中對軟件趨勢的影響,JSON 比任何其他數據交換格式繼續受到越來越多的關注。 博客圈很快就會回應“JSON 比 XML 更好”,但大多數情況下,這些陳述是不合理的,或者是在語義和冗長方面進行了簡單的比較。 那麼任何一個標準都比另一個更好嗎? 這個問題的答案只能來自對每個標準的更深入的評估。

結論

從 1990 年到今天,網絡已經走過了漫長的道路。 網景和微軟之間的瀏覽器之戰導致了 HTML 的分歧災難,需要一個解決方案來拯救網絡。 XML 被發明為形式化 XHTML,並為整體計算提供了一個聖杯解決方案。 從後端服務器渲染完整的 HTML 頁面到 AJAX 和 SPA,Web 架構和瀏覽器開發的趨勢已將焦點轉移到 JavaScript,從而將全球開發人員轉向 JSON。

JSON 的流行程度與 JavaScript 的流行程度相關。 憑藉其易用性和較短的學習曲線,JavaScript 帶來了比任何其他語言都多的新開發人員來編寫軟件。 借助 JSON 與最流行的開發平台的原生集成,在 Stack Overflow 上提出的有關 JSON 的問題比任何其他數據交換格式都多也就不足為奇了。

隨著近年來的軟件趨勢將更多的 JavaScript 開發人員帶入該行業,JSON 獲得了“最流行的數據交換格式”的稱號。

從表面上看,“JSON 與 XML”之戰是針對 JSON 進行的,但在深度上,這不僅僅是表面上看到的。

在本文的第 2 部分中,我們將仔細研究 JSON 和 XML 的技術優勢和劣勢,並評估每種標準對常見應用程序和企業的適用性。 仔細研究“數據交換”將揭示其對整個應用程序軟件風險的影響的廣度。 更深入地了解 JSON 和 XML 之間的根本差異將使開發人員能夠更好地評估每個標準與其項目需求相關的軟件風險——使開發人員能夠構建更穩定、更能抵抗錯誤和未來的軟件未知數。

順便說一句,JSON 規範的一個有趣的怪癖是您不能將具有雙向關係的 JavaScript 對象(其中子屬性引用父屬性)轉換為 JSON。 這樣做會導致Uncaught TypeError: Converting circular structure to JSON錯誤。 有關此限制的破解,請參閱JSON 中的雙向關係支持

參考

1. 互聯網:歷史百科全書。 年表,第 3 卷,p。 130 (ABC-CLIO, 2005)

2. 元數據、語義和本體手冊,p。 109(世界科學,2013 年 12 月)

3. WebDiy.org - 萬維網聯盟 (W3C) - 歷史

4. “JavaSoft 發布 Java 1.0”(Sun Microsystems,1996 年 1 月)

5. 空間支持下一代互聯網(David Engen,2002 年 1 月)

6. XMLHTTP 的故事(AlexHopmann.com,2007 年 1 月)

7. 開始 Ajax - 第 2 頁(Wiley Publishing,2007 年 3 月)

8. Ajax:一種新的 Web 應用程序方法(Jesse James Garrett,2005 年 2 月)

9. 阿賈克斯簡史(Aaron Swartz,2005 年 12 月)

10. “什麼是 Kayak.com?” (企業背景資料,2008 年 10 月)

11. 內部瀏覽:擴展瀏覽導航範式(Netscape,2003 年 5 月)

12.“使用 DHTML 的自包含網站”(SlashDotSlash.com,2012 年 7 月)

13. 交付數據和格式化信息以允許客戶端操作(美國專利局,2002 年 4 月)

14.“什麼是阿賈克斯?” 專業阿賈克斯,第 2 版。 (威利,2007 年 3 月)

15. Douglas Crockford:JSON 傳奇(Yahoo!,2009 年 7 月)

16. ECMA 標準 404(ECMA 國際,2017 年 12 月)

17. Ajax:一種新的 Web 應用程序方法(Jesse James Garrett,2005 年 2 月)

18. 堆棧溢出趨勢(堆棧溢出,2009-2019)

19. 谷歌趨勢(谷歌,2004-2019)

20. JSON:XML 的無脂肪替代方案(Crockford,2006 年)

21. XML:尖括號稅(Coding Horror,2008 年 5 月)

22. Xml 糟透了(WikiWikiWeb,2016 年)