JSON——IT技術人員都必需要了解的一種數據交換格式

JSON做爲目前Web主流的數據交換格式,是每一個IT技術人員都必需要了解的一種數據交換格式。尤爲是在Ajax和REST技術的大行其道的當今,JSON無疑成爲了數據交換格式的首選javascript

今天你們就和豬哥一塊兒來學習一下JSON的相關知識吧!
在這裏插入圖片描述前端

1、XML

在講JSON以前,我以爲有必要先帶你們瞭解一下XML(Extensible Markup Language 可擴展標記語言),由於JSON正在慢慢取代XML。java

1.XML起源

早期Web發展和負載的數據量並非很大,因此基本靠HTML(1989誕生)能夠解決。可是隨着Web應用的不斷壯大,HTML的一些缺點也慢慢顯現,如:可讀性差、解析時間長、數據描述性差等。python

1998年2月10日,W3C(World WideⅥiebConsortium,萬維網聯盟)公佈XML 1.0標準,XML誕生了。web

XML使用一個簡單而又靈活的標準格式,爲基於Web的應用提供了一個描述數據和交換數據的有效手段。可是,XML並不是是用來取代HTML的。HTML着重如何描述將文件顯示在瀏覽器中,它着重描述如何將數據以結構化方式表示。數據庫

XML簡單易於在任何應用程序中讀/寫數據,這使XML很快成爲數據交換的惟一公共語言,因此XML被普遍應用。編程

注意: XML是一種數據交換的格式,並非編程語言。並且他是跨語言的數據格式,目前絕大多數編程語言均支持XML。json

2.XML實例

XML究竟怎麼用?是什麼樣子的?咱們來舉一個簡單的例子吧!數組

A公司要和B公司業務對接(A公司要獲取B公司的用戶基本信息),B公司提供接口讓A公司調用,A、B公司對接的開發人員會提早溝通好這個接口的:URL、傳參、返回數據、異常等等。瀏覽器

可是也許兩個公司使用的技術棧並不相同,因此支持的據格式也可能不一樣。爲了解決因技術棧不一樣帶來的數據格式不一樣問題,A、B公司的開發協商使用一種通用的數據格式來傳輸,因而他們想到了XML。

  1. 假設如今A公司須要名稱叫pig的用戶信息,因而A公司調用B公司的接口,並傳參數name=pig。
  2. 而後B公司接口收到請求後,將用戶信息從數據庫拿出來,而後封裝成下面的XML格式,而後再返回給A公司。
  3. 最後A公司收到返回後,使用XML庫解析數據便可
<?xml version="1.0" encoding="UTF-8"?>
<person>
  <name>pig</name>
  <age>18</age>
  <sex>man</sex>
  <hometown>
    <province>江西省</province>
    <city>撫州市</city>
    <county>崇仁縣</county>
  </hometown>
</person>

3.XML十字路口

雖然XML標準自己簡單,但與XML相關的標準卻種類繁多,W3C制定的相關標準就有二十多個,採用XML制定的重要的電子商務標準就有十多個。這給軟件開發工程師帶來了極大的麻煩!

隨着AJax(以前叫XMLHTTP,2005年後才叫Ajax)技術的流行,XML的弊端也愈來愈顯現:你們都知道XML實現是基於DOM樹實現的,而DOM在各類瀏覽器中的實現細節不盡相同,因此XML的跨瀏覽器兼容性並很差,因此急需一種新的數據負載格式集成到HTML頁面中以知足Ajax的要求!

2、JSON

前面咱們說了隨着Ajax的流行,而各類瀏覽器對DOM的實現細節不盡相同,因此會出現兼容性問題,這對前端開發同窗來說真的是災難。由於一個功能可能須要用代碼去兼容各類不一樣的瀏覽器,還要調試,工做量巨大。

1.JSON誕生

如何才能將數據整合到HTML中又解決瀏覽器兼容性問題呢?答案就是:利用全部主流瀏覽器中的一種通用組件——JavaScript引擎。這樣只要創造一種JavaScript引擎能識別的數據格式就能夠啦!

2001 年 4 月,首個 JSON 格式的消息被髮送出來。此消息是從舊金山灣區某車庫的一臺計算機發出的,這是計算機歷史上重要的的時刻。道格拉斯·克羅克福特(Douglas Crockford) 和 奇普·莫寧斯達(Chip Morningstar) 是一家名爲 State Software 的技術諮詢公司的聯合創始人(後來都在雅虎任職),他們當時彙集在 Morningstar 的車庫裏測試某個想法,發出了此消息。

document.domain = 'fudco'; 

parent.session.receive( 
    { to: "session", do: "test", text: "Hello world" } 
)

熟悉js的同窗是否是也很驚訝,第一個 JSON 消息它明顯就是 JavaScript!實際上,Crockford 本身也說過他不是第一個這樣作的人。網景(Netscape )公司的某人早在 1996 年就使用 JavaScript 數組字面量來交換信息。由於消息就是 JavaScript,其不須要任何特殊解析工做,JavaScript 解釋器就可搞定一切。

最初的 JSON 信息實際上與 JavaScript 解釋器發生了衝突。JavaScript 保留了大量的關鍵字(ECMAScript 6 版本就有 64 個保留字),Crockford 和 Morningstar 無心中在其 JSON 中使用了一個保留字:do。由於 JavaScript 使用的保留字太多了,因此Crockford決定:既然不可避免的要使用到這些保留字,那就要求全部的 JSON 鍵名都加上引號。被引發來的鍵名會被 JavaScript 解釋器識別成字符串。這就爲何今天 JSON 鍵名都要用引號引發來的緣由。

在這裏插入圖片描述
這種數據格式既然能夠被JavaScript引擎識別,那就解決了XML帶來的各類瀏覽器兼容性問題,因此這種技術徹底能夠推廣出去,因而Crockford 和 Morningstar 想給其命名爲 「JSML」,表示JavaScript 標記語言(JavaScript Markup Language)的意思,但發現這個縮寫已經被一個名爲 Java Speech 標記語言的東西所使用了。因此他們決定採用 「JavaScript Object Notation」,縮寫爲 JSON,至此JSON正式誕生。

2.JSON發展

2005 年,JSON 有了一次大爆發。那一年,一位名叫 Jesse James Garrett 的網頁設計師和開發者在博客文章中創造了 「AJAX」 一詞。他很謹慎地強調:AJAX 並非新技術,而是 「好幾種蓬勃發展的技術以某種強大的新方式聚集在一塊兒。」 AJAX 是 Garrett 給這種正受到青睞的 Web 應用程序的新開發方法的命名。他的博客文章接着描述了開發人員如何利用 JavaScript 和 XMLHttpRequest 構建新型應用程序,這些應用程序比傳統的網頁更具響應性和狀態性。他還以 Gmail 和 Flickr 網站已經使用 AJAX 技術做爲了例子。

固然了,「AJAX」 中的 「X」 表明 XML。但在隨後的問答帖子中,Garrett 指出,JSON 能夠徹底替代 XML。他寫道:「雖然 XML 是 AJAX 客戶端進行數據輸入、輸出的最完善的技術,但要實現一樣的效果,也可使用像 JavaScript Object Notation(JSON)或任何相似的結構數據方法等技術。 」

這時JSON便在國外的博客圈、技術圈慢慢流行起來!

2006 年,Dave Winer,一位高產的博主,他也是許多基於 XML 的技術(如 RSS 和 XML-RPC)背後的開發工程師,他抱怨到 JSON 毫無疑問的正在從新發明 XML。

Crockford 閱讀了 Winer 的這篇文章並留下了評論。爲了迴應 JSON 從新發明 XML 的指責,Crockford 寫到:「重造輪子的好處是能夠獲得一個更好的輪子」。

3.JSON實例

仍是以上面A、B公司業務對接爲例子,兩邊的開發人員協商一種通用的數據交換格式,如今有XML與JSON比較流行的兩種數據格式,因而開發人員又將用戶信息以JSON形式展示出來,而後比較兩種數據格式:

{
  "person": {
    "name": "pig",
    "age": "18",
    "sex": "man",
    "hometown": {
      "province": "江西省",
      "city": "撫州市",
      "county": "崇仁縣"
    }
  }
}

比較XML與JSON的數據格式以後,開發人員發現:JSON可閱讀性、簡易性更好並且相同數據負載JSON字符數更少,因此兩個開發人員一致贊成使用JSON做爲接口數據格式!

並且還有重要的一點,在編寫XML時,第一行須要定義XML的版本,而JSON不存在版本問題,格式永遠不變!

4.當今JSON地位

當今的JSON 已經佔領了全世界。絕大多數的應用程序彼此經過互聯網通訊時,都在使用 JSON。它已被全部大型企業所採用:十大最受歡迎的 web API 接口列表中(主要由 Google、Facebook 和 Twitter 提供),僅僅只有一個 API 接口是以 XML 的格式開放數據的。

JSON 也在程序編碼級別和文件存儲上被普遍採用:在 Stack Overflow上,關於JSON的問題愈來愈多,下圖是關於Stack Overflow上不一樣數據交換格式的問題數和時間的曲線關係圖。在這裏插入圖片描述
從上圖咱們能夠看出在Stack Overflow上愈來愈多JSON的問題,從這裏也能夠反映出JSON愈來愈流行!

更詳細的關於創造JSON的故事可閱讀:https://www.jianshu.com/p/62a856367d2d

三、總結

因爲篇幅緣由咱們今天只學習了JSON的誕生和起源相關知識,知道了JSON的誕生是由於XML沒法知足Ajax對瀏覽器兼容性問題,因此就有人想創造一種瀏覽器通用組件:JavaScript引擎 能識別的數據格式,這樣就能夠解決瀏覽器不兼容問題,因此就從Js數據格式中提取了一個子集,取名爲JSON!

咱們還知道了爲何JSON鍵爲何須要用雙引號引發來,是由於JS中存在許多的關鍵字和保留關鍵字,爲了不與JS關鍵字衝突,因此Crockford就要求在全部的鍵名上加上雙引號,這樣JS引擎會將其識別爲字符串,就避免與JS中關鍵字衝突!

下期咱們會詳細介紹JSON數據結構、JSON序列化、JSON在Python中的使用等知識。

瞭解技術誕生與發展背後的故事一樣重要,由於這些能夠做爲你吹逼的資本!

參考資料:
百度百科:XML
Daniel Rubio:JSON 簡介
https://www.jianshu.com/p/62a856367d2d

相關文章
相關標籤/搜索