對json類型的理解

第一篇博客:

最近一直在從事前端方向的工作,在前端向後臺服務器傳送數據的時候都使用的是json的數據格式進行傳值,但是說到具體的json數據格式是一個什麼東西,也不是很理解,今天去查閱了些資料,記錄一下。

都說了解一個東西,得先去了解他的敵人和歷史,爲此我也去了解了些關於xml和web相關的東西,整理記錄一下,可能廢話比較多,有些知識點也不一定準確,但是大方向肯定是沒錯的。

1、互聯網的起源

1968年,當時還在美蘇冷戰時期,當時的美國只有一個軍事指揮中心,他們就想,萬一蘇聯來把自己的這個中心炸了,那豈不就完犢子了,所以當時國會就批准了大批的資金給美國國防部高級研究計劃局,讓他們組建了一個名爲ARPANET(英文 Advanced Research Projects Agency Network 的縮寫,又稱“阿帕”網)的計算機網,在1969年,“阿帕”網第一期在四個大學間通訊完成,這大致就是互聯網的萌芽。 

一個好的東西出來,必然引領一個時代,各個國家都是有很多高端人才的,當時美國研發出互聯網絡的通信以後,各國之間涌現出了大批的新的網絡。直到1983年,美國將“阿帕”網一分爲二,一份用作軍用,一份用作民用,並把用作民用的改名爲互聯網。但是當時全球已經有了衆多的互聯網成果,我估計這時,就是各國什麼大佬們相互商討比拼,最後“阿帕”網憑藉他的TCP/IP協議力壓羣雄,成爲我們至今任然在遵循的網絡傳輸控制協議。

2、web的起源

互聯網的概念出來以後,我也不知道當時大家都拿來幹嘛,網絡世界基本一片空白,沒有所謂的瀏覽器;直到1991年8月6日,這天一個叫做蒂姆·伯納斯·李的人將萬維網的項目簡介帖在了alt.hypertext 新聞組,後來人們一把把這天當做萬維網公用服務在網絡上的首次亮相,其實我們直到今天所做的所有的開發工作,都是在實現一個萬維網服務。(萬維網 world wide web, 也就是我們通過WWW在瀏覽器上訪問服務器的頁面),再到1994年,當時的web已經發展的非常迅速了,蒂姆·伯納斯·李就覺得的有一個規範,不然就容易亂套,所以他就組建了萬維網聯盟,簡稱W3C,這是一個類似基金會或委員會的機構來規範,爲的是web的發展和制定規範,以達成全球統一標準,。後來W3C慢慢研發出CSS、HTML、XML等,這下我們的第二主題XML出現了。

3、XML是什麼?

剛纔說的是一個互聯網和web的一個大致起源,現在來稍微講一下XML的介紹,XML全名EXtensible Markup Language,翻譯爲可擴展標記語言。那麼什麼叫做標記呢?所謂標記就是一種記號,比如一片文章中你畫的一個重點,你用紅線標記出來,這就是標記,可擴展就是說可以自己來定義每一個標記,意思就是說XML是一種可以我們自由添加標籤的數據格式。但是在我們引入的XML配置文件的時候,爲什麼要加入一些DTD呢,DTD又是什麼呢? 既然XML是可以擴展的,也就是說每一個標籤的含義其實是不明確的,而DTD就是用來給這些標籤指明含義的,現在DTD基本被Schema取代,但是道理是一樣的。那麼現在又又一個問題,如果一個XML文件,我引入的兩個DTD有相同名稱的標籤名怎麼辦,所以就出現了命名空間這種概念,在一個XML中,命名空間的定義都是:xmlns:a, 其中的a就是命名空間的別名,以後用這個命名空間的標籤時,加上這個別名就能夠區分了。

舉個例子吧:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                          http://www.springframework.org/schema/beans/spring-beans.xsd

</beans>

上面的xmlns:xsi就是一個命名空間,最後的xsi:schemaLocation,是一個在xmlns:xsi裏定義的別名標籤,http://www.springframework.org/schema/beans表示 這個命名空間下的模板文件是

http://www.springframework.org/schema/beans/spring-beans.xsd

4、HTML的來歷

其實上面已經有些偏題了,現在迴歸正題,在很久以前其實科學家研究者們就會把大家習慣做標示用的一些符號記錄同一下來,而這個標記符號是沒有任何其他意義的,他和自己寫的內容是分割的,這樣大家看到這個標記符號就知道後面是作者標記的什麼意思,而不知道這個標記的也不會影響閱讀,這其實就是最早的GML的概念。然後到了1978年,ANSI將GML加以整理規範,發佈成爲SGML,1986年起爲 ISO 所採用(ISO 8879),並且被廣泛地運用在各種大型的文件計劃中。但是因爲這個SGML定義的東西太細太複雜了(標準手冊就有500多頁),導致難以推廣。

不好推廣不行呀,各個研究者科學家們的文檔資料要相互交流,而且當時的計算機互聯網(1983)已經出現,只是當時是沒有瀏覽器的說法的,大家會把文檔保存在自己的計算機,但是Tim Berners-Lee他就發現大家電腦裏的文檔格式都不一樣,這可不行,所以後來他就在SGML的基礎上提煉出HTML的概念,用來在計算機上能夠顯示文檔信息,最先的HTML規範是隻有20多個標籤的,其實這個時候Tim Berners-Lee應該也已經提出了瀏覽器和web的概念,大家就已經可以通過HTML的規範,在互聯網上相互交流閱讀文檔了。網上說的餓HTML是在1993年6月作爲互聯網工程工作小組(IETF)工作草案發布(並非標準)的。

5、XML的來歷

1993年,當時的人們已經有瀏覽器了,已經能夠在互聯網上相互分享文檔資料,但是HTML顯示的內容是由服務器提供的,而一個請求始終是要通過HTTP協議吧數據傳遞到服務器的,但是HTMl是不夠靈活的,不同的服務器可能需要不同的數據結構,這時HTML就完全不能勝任,所以在1995年的萬維網協會(W3C)就又在SGML的基礎上,提出去一套簡單的數據結構表現規範,就是XML.。所以XML的用途主要就是用來傳送和攜帶數據的,HTML是用來展示數據的。當然因爲他們其實也都是一些不同DTD的文檔規範,XML也是能夠展示頁面的。

6、js登上歷史舞臺

HTML語言出現以後,其實在瀏覽器上已經能夠正常的瀏覽文檔信息,當時主流的瀏覽器主要是IE和網景公司的Navigator瀏覽器,1994年網景公司推出Navigator瀏覽器0.9,這是當時最成熟的一個瀏覽器版本,但是他並不支持與訪問者的互動,就比如輸入一個表單的信息,瀏覽器並不能檢驗該表單是否填寫完整,必須把這個數據發送到後來由服務器進行校驗,這在當時的帶寬很小的情況下是完全不能容忍的,所以網景公司召集全員開會,當時有兩種選擇:一個是採用現有的語言,比如Perl、Python、Tcl、Scheme等等,允許它們直接嵌入網頁;另一個是發明一種全新的語言;就在網景公司舉棋不定的時候,Sun公司宣佈了一件大事,1995年Sun公司將Oak語言改名爲Java,正式向市場推出。Sun公司大肆宣傳,許諾這種語言可以"一次編寫,到處運行"(Write Once, Run Anywhere),它看上去很可能成爲未來的主宰。而偏偏網景公司的高層也都是Java的信徒,一致決定研發一種新的語言,並且決定與Sun公司結成聯盟。它不僅允許Java程序以applet(小程序)的形式,直接在瀏覽器中運行;甚至還考慮直接將Java作爲腳本語言嵌入網頁,只是因爲這樣會使HTML網頁過於複雜,後來纔不得不放棄。1995年4月,網景公司錄用了一個34歲的小夥Brendan Eich,網景公司後來要求他開發一種網頁腳本語言,也就是在瀏覽器能運行的語言,而且必須看上去與Java足夠相似。所以Brendan Eich用十天開發了javaScript:

(1)借鑑C語言的基本語法;

(2)借鑑Java語言的數據類型和內存管理;

(3)借鑑Scheme語言,將函數提升到"第一等公民"(first class)的地位;

(4)借鑑Self語言,使用基於原型(prototype)的繼承機制。

由此javaScript登上歷史舞臺。

7、json出現

json出現以前大家的web項目大多采用XML的數據格式來傳遞數據,但是XML的標籤在生成和解析的時候都給開發人員帶來困擾,爲什麼用xml呢?因爲xml是一種與語言無關的純文本的數據格式。所以在2002年的某一天,道格拉斯·克羅克福特(Douglas Crockford)同學爲了拯救廣大的開發人員,發明了json這種輕量級的數據交換格式,因爲當時的道格拉斯·克羅克福特(Douglas Crockford)在雅虎上班,所以整個json被定義爲一種javaScript的子集。json數據格式的類型也定義在了js的背景下:

- number:和JavaScript的number完全一致;

boolean:就是JavaScript的true或false;

- string:就是JavaScript的string;

- null:就是JavaScript的null;

- array:就是JavaScript的Array表示方式——[];

- object:就是JavaScript的{...}表示方式。

JSON還定死了字符集必須是UTF-8,表示多語言就沒有問題了。爲了統一解析,JSON的字符串規定必須用雙引號”“,Object的鍵也必須用雙引號”“。由於json的格式簡單,而且當時的web開發,前端都是用的javaScript,所以json很快就風靡全球,被EMCA定義爲標準。

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章