Json簡介

JSON(JavaScript Object Notation(記號、標記)) 是一種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一個子集。 JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成爲理想的數據交換語言。JSON易於人閱讀和編寫,同時也易於機器解析和生成。javascript

1、JSON和XML的比較java

一、可讀性程序員

JSON和XML的可讀性可謂不相上下,一邊是簡易的語法,一邊是規範的標籤形式,很難分出勝負。json

二、可擴展性數組

XML天生有很好的擴展性,JSON固然也有,不過JSON在Javascript主場做戰,能夠存儲Javascript複合對象,有着xml不可比擬的優點。網絡

三、編碼難度數據結構

XML有豐富的編碼工具,好比Dom4j、JDom等,JSON也有提供的工具。無工具的狀況下,相信熟練的開發人員同樣能很快的寫出想要的xml文檔和JSON字符串,不過,xml文檔要多不少結構上的字符。工具

四、解碼難度ui

XML的解析方式有兩種:this

一是經過文檔模型解析,也就是經過父標籤索引出一組標記。例如:xmlData.getElementsByTagName("tagName"),可是這樣是要在預先知道文檔結構的狀況下使用,沒法進行通用的封裝。另一種方法是遍歷節點(document 以及 childNodes)。這個能夠經過遞歸來實現,不過解析出來的數據仍舊是形式各異,每每也不能知足預先的要求。

凡是這樣可擴展的結構數據解析起來必定都很困難。

JSON也一樣如此。若是預先知道JSON結構的狀況下,使用JSON進行數據傳遞簡直是太美妙了,能夠寫出很實用美觀可讀性強的代碼。若是你是純粹的前臺開發人員,必定會很是喜歡JSON。可是若是你是一個應用開發人員,就不是那麼喜歡了,畢竟xml纔是真正的結構化標記語言,用於進行數據傳遞。而若是不知道JSON的結構而去解析JSON的話,那簡直是噩夢。費時費力不說,代碼也會變得冗餘拖沓,獲得的結果也不盡人意。可是這樣也不影響衆多前臺開發人員選擇JSON。由於json.js中的toJSONString()就能夠看到JSON的字符串結構。固然不是使用這個字符串,這樣仍舊是噩夢。經常使用JSON的人看到這個字符串以後,就對JSON的結構很明瞭了,就更容易的操做JSON。

以上是在Javascript中僅對於數據傳遞的xml與JSON的解析。在Javascript地盤內,JSON畢竟是主場做戰,其優點固然要遠遠優越於xml。若是JSON中存儲Javascript複合對象,並且不知道其結構的話,我相信不少程序員也同樣是哭着解析JSON的。

五、有效數據率

除了上述以外,JSON和XML還有另一個很大的區別在於有效數據率。JSON做爲數據包格式傳輸的時候具備更高的效率,這是由於JSON不像XML那樣須要有嚴格的閉合標籤,這就讓有效數據量與總數據包比大大提高,從而減小同等數據流量的狀況下,網絡的傳輸壓力。

 

2、JSON支持的數據格式

JSON建構有兩種基本結構:

   一、A collection of name/value pairs

   二、An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence. 

json簡單說就是javascript中的對象和數組,因此這兩種結構就是對象和數組兩種結構,經過這兩種結構能夠表示各類複雜的結構。

一、對象:對象在js中表示爲「{}」括起來的內容,數據結構爲 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key爲對象的屬性,value爲對應的屬性值,因此很容易理解,取值方法爲對象.key 獲取屬性值,這個屬性值的類型能夠是數字、字符串、數組、對象幾種。對象是一個無序的「‘名稱/值’對」集合。

(1)一個對象以「{」(左括號)開始,「}」(右括號)結束。

(2)每一個「名稱」後跟一個「:」(冒號);

(3)「‘名稱/值’ 對」之間使用「,」(逗號)分隔。

二、數組:數組在js中是中括號「[]」括起來的內容,數據結構爲 ["java","javascript","vb",...],取值方式和全部語言中同樣,使用索引獲取,字段值的類型能夠是 數字、字符串、數組、對象幾種。數組是值(value)的有序集合。

(1)一個數組以「[」(左中括號)開始,「]」(右中括號)結束。

(2)值之間使用「,」(逗號)分隔。

通過對象、數組2種結構就能夠組合成複雜的數據結構了。

舉例2:包含三個People對象,這三個對象放在一個數組中。

    {

"people":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

]

}

舉例3:包含三個程序員、三個做者和兩個音樂家,每一個類別又放在一個數組中。

{"programmers":[

{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},

{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},

{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}

],

"authors":[

{"firstName":"Isaac","lastName":"Asimov","genre":"sciencefiction"},

{"firstName":"Tad","lastName":"Williams","genre":"fantasy"},

{"firstName":"Frank","lastName":"Peretti","genre":"christianfiction"}

],

"musicians":[

{"firstName":"Eric","lastName":"Clapton","instrument":"guitar"},

{"firstName":"Sergei","lastName":"Rachmaninoff","instrument":"piano"}

]}

相關文章
相關標籤/搜索