考慮到自2005年以來,Web編程界對“異步JavaScript和XML”而非“異步JavaScript和JSON”的技術潛力垂涎三尺,妳可以發現JSON的主導地位是如此令人驚訝。當然,這可能與這兩種通信格式的流行程度無關,只是反映出“AJAX”這個縮寫似乎比“AJAJ”更有吸引力。然而,即使有些人(實際上不是很多人)在2005年已經用JSON取代了XML,我們不禁要問,XML的厄運來得如此之快,以至於“異步JavaScript和XML”這個名稱在短短十年左右的時間裏已經成為壹個具有諷刺意味的誤稱。那麽這十年發生了什麽呢?JSON是如何在這麽多應用中取代XML的?這種現在全世界的工程師和系統都在使用和依賴的數據格式是誰提出的?
2001年4月,第壹條JSON格式的消息發出。這條消息是從舊金山灣區壹個車庫裏的計算機發出的,這是計算機歷史上的壹個重要時刻。道格拉斯·克洛克福特和奇普·晨星(Chip Morningstar)是壹家名為State Software的技術咨詢公司的聯合創始人,他們聚集在晨星的車庫裏測試壹個想法,並發出了以下信息。
在“AJAX”這個術語被創造出來之前,Crockford和Morningstar壹直在嘗試構建優秀的AJAX應用程序,但是瀏覽器與它們不兼容。他們希望在加載初始頁面後將數據傳遞給應用程序,但他們的目標是針對所有瀏覽器,這是無法實現的。
這在今天是不可信的,但要記住,在2001年,Internet Explorer(IE)代表了web瀏覽器最先進的技術產品。早在1999,Internet Explorer 5就支持XMLHttpRequest的原始形式,開發者可以使用壹個叫做ActiveX的框架來訪問這個對象。Crockford和Morningstar可以使用這種技術(在IE中)來獲取數據,但他們不能在Netscape 4(他們希望支持的另壹種瀏覽器)中使用這種解決方案。為此,克羅克福德和晨星不得不使用不同的系統來兼容不同的瀏覽器。
第壹條JSON消息如下:
只有壹小部分消息類似於我們今天所知的JSON,它實際上是壹個包含壹些JavaScript的HTML文檔。類似JSON的部分只是傳遞給名為receive()的函數的JavaScript對象的文字。
Crockford和Morningstar決定濫用HTML框架(
第壹條JSON消息的驚人之處在於,它顯然不是第壹次使用新的數據格式。是JavaScript!事實上,以這種方式使用JavaScript的想法非常簡單,以至於克羅克福德自己也說過他不是第壹個這樣做的人。他說早在1996網景就有人用JavaScript數組文字交換信息。因為消息是JavaScript,所以不需要任何特殊的解析工作,JavaScript解釋器可以處理壹切。
最初的JSON信息實際上與JavaScript解釋器發生了沖突。JavaScript保留了大量的關鍵字(ECMAScript 6有64個保留字),Crockford和Morningstar無意中在他們的JSON中使用了壹個保留字。他們使用do作為鍵名,但是do是解釋器中的保留字。因為JavaScript使用了太多的保留字,Crockford決定,既然不可避免地要使用這些保留字,那麽所有的JSON鍵名都應該用引號括起來。導致的鍵名將被JavaScript解釋器識別為字符串,這意味著那些保留字也可以安全地使用。這就是為什麽今天JSON鍵名被引用的原因。
Crockford和Morningstar意識到這種技術可以應用於各種應用系統。我本想把它命名為“JSML”,意思是JavaScript標記語言,但是我發現這個縮寫已經被壹個叫Java語音標記語言的東西使用了。於是他們決定采用“JavaScript對象表示法”,縮寫為JSON。他們開始向客戶銷售,但很快發現客戶不願意冒險使用缺乏官方規範的未知技術。所以克羅克福德決定寫壹個規範。
2002年,克羅克福德買下了JSON.org的域名,並加入了JSON語法和壹個解釋器的例子。該網站仍在運行,現在它包含壹個到2013正式批準的JSON ECMA標準的重要鏈接。網站建立後,Crockford並沒有過多的推廣,但很快發現很多人在提交不同編程語言的JSON解析器實現。JSON的血統顯然和JavaScript有關,但是很明顯JSON非常適合不同語言之間的數據交換。
2005年,JSON有了大爆發。那壹年,壹位名叫傑西·詹姆斯·加勒特的網頁設計師和開發者在他的博客中創造了“AJAX”這個詞。他謹慎地強調AJAX不是壹項新技術,而是“幾種蓬勃發展的技術以壹種強大的新方式結合在壹起。”5 "Ajax是Garrett為這種流行的Web應用程序的新開發方法起的名字。他的博客文章隨後描述了開發人員如何使用JavaScript和XMLHttpRequest來構建新的應用程序,這些應用程序比傳統的網頁響應更快、更有狀態。他還用AJAX技術作為Gmail和Flickr網站的例子。
當然,AJAX中的“X”代表XML。但在隨後的問答帖子中,Garrett指出JSON完全可以取代XML。他寫道:“盡管XML是AJAX客戶端輸入和輸出數據的最完美的技術,但您也可以使用JavaScript對象表示法(JSON)或任何類似的結構化數據方法來達到同樣的效果。”六
開發人員確實發現在構建AJAX應用程序時使用JSON很容易,許多人更喜歡它而不是XML。諷刺的是,對AJAX的興趣逐漸導致了JSON的流行。大約在這個時候,JSON引起了博客圈的註意。
2006年,Dave Winer——壹位多產的博客作者和開發工程師,開發了許多基於XML的技術,如RSS和XML-RPC——抱怨說JSON無疑是在重新發明XML。雖然人們認為數據交換格式之間的競爭不會導致某項技術的消亡。它寫道:
我理解Winer的沮喪。實際上沒有多少人喜歡XML。甚至連Winer都說他不喜歡XML。但是XML被設計成任何人都可以使用,幾乎可以用於任何可以想象的事情。畢竟,XML實際上是壹種元語言,它允許您為特定的應用程序定制特定領域的語言。如Web信息流技術RSS和SOAP(簡單對象訪問協議)就是例子。Winer認為,由於通用交換格式帶來的好處,努力實現* * *知識是非常重要的。XML的靈活性應該能夠滿足任何人的需求。然而,JSON格式並沒有提供比XML更多的東西,除了它拋棄了使XML更加靈活的繁瑣的東西。
克羅克福德讀了維納的文章,並留下了評論。在回應JSON重新發明XML的指責時,Crockford寫道:“再造輪子的好處是妳可以得到壹個更好的輪子。”九
到2014,JSON已經被ECMA標準和RFC正式認可。它有自己的MIME類型。JSON已經進入大聯盟時代。
為什麽JSON比XML更受歡迎?
Crockford還聲稱JSON的另壹個巨大優勢是它被設計成壹種數據交換格式。12從壹開始,它的目的就是在應用程序之間傳遞結構化的信息。盡管XML也可以用來傳輸數據,但它最初是作為壹種文檔標記語言而設計的。它由SGML(通用標準標記語言)演變而來,它由壹種叫做Scribe的標記語言演變而來,Scribe的目標是發展成為壹種類似於LaTeX的文字處理系統。在XML中,標簽可以包含所謂的“混合內容”,即單詞和短語周圍嵌入了標簽的文本。這會帶出壹張紅藍筆記錄的手稿的圖片,這是對標記語言核心思想的形象比喻。另壹方面,JSON不支持混合內容模型的清晰構造,但也意味著其結構足夠簡單。文檔最好的建模是樹,但是JSON放棄了這個文檔的想法。Crockford將JSON抽象限制為字典和數組,這是所有程序員在構建程序時都會用到的最基本和最熟悉的元素。
最後,我認為人們不喜歡XML是因為它令人困惑。令人困惑的是,它有許多不同的風格。乍壹看,XML本身與其子語言(如RSS、ATOM、SOAP或SVG)之間的界限並不明顯。典型的XML文檔的第壹行標識XML的版本,然後XML文檔應該符合特定的子語言。有壹些變化需要考慮,特別是與JSON相比,JSON非常簡單,因此永遠不需要編寫新版本的JSON規範。XML的設計者試圖用XML作為唯壹的數據交換格式來主宰所有格式,他們會陷入經典的程序員陷阱:過度工程化。XML非常壹般化和概念化,所以很難簡單地使用它。
2000年發起了讓HTML符合XML標準的活動,發布了符合XML標準的HTML開發規範,這就是後來著名的XHTML。雖然壹些瀏覽器廠商立即開始支持這壹新標準,但也很明顯,大多數基於HTML技術的開發者不願意改變他們的習慣。新標準要求嚴格驗證XHTML文檔,而不是基於HTML的基準。但是大多數網站依賴於HTML的容忍規則。到了2009年,編寫第二版XHTML標準的嘗試已經流產,因為很明顯未來HTML會發展成HTML5(壹種不需要強制接受XML規則的標準)。
如果XHTML的努力成功,XML可能會成為其設計者所希望的通用數據格式。想象壹個HTML文檔和API響應具有完全相同的結構的世界。在這樣的世界裏,JSON可能不會像現在這樣無處不在。但是我認為HTML的失敗是XML陣營的道德失敗。如果XML不是HTML的最佳工具,其他應用程序可能會有更好的工具。在這個世界,我們的世界,很容易看到壹個簡單的、量身定制的JSON格式可以取得更大的成功。
via:https://twobithistory . org/2017/09/21/the-rise-and-rise-of-JSON . html
作者:二位歷史題目:lujun9972譯者:runningwater校對:wxy