天天看點

JSON的基本知識

JSON的全稱是JavaScript Object Notation,即JavaScript對象符号,它是一種輕量級的資料交換格式。JSON的資料格式既适合人來讀/寫,也适合計算機本身解析和生成。最早的時候,JSON是JavaScript語言的資料交換格式,後來慢慢發展成一種語言無關的資料交換格式,這一點非常類似于XML。

JSON主要在類似于C的程式設計語言中廣泛使用,這些語言包括C、C++、C#、Java、JavaScript、Perl、Python等。JSON提供了多種語言之間完成資料交換的能力,是以,JSON也是一種非常理想的資料交換格式。JSON主要有如下兩種資料結構:

Ø  由key-value對組成的資料結構,這種資料結構在不同的語言中有不同的實作。例如,在JavaScript中是一個對象,在Java中是一種Map結構,在C語言中,則是一個struct。在其他語言中,可能有record、dictionary、hash table等。

Ø  有序集合。這種資料結構在不同語言中,可能有list、vector、數組和序列等實作。

上面的兩種資料結構在不同的語言中都有對應的實作。是以,這種簡便的資料表示方式完全可以實作跨語言,是以可以作為程式設計語言中通用的資料交換格式。在JavaScript中主要有兩種JSON的文法,一種用于建立對象,另一種用于建立數組。

1.使用JSON文法建立對象

使用JSON文法建立對象是一種更簡單的方式,使用JSON文法可避免書寫函數,也可避免使用new關鍵字,而是直接擷取一個JavaScript對象。對于早期的JavaScript版本,如果要使用JavaScript建立一個對象,通常情況下可能會這樣寫:

//定義一個函數,作為構造器  

function Person(name, sex)   

{  

    this.name = name;   

    this.sex = sex;   

}  

//建立一個Person執行個體  

var p = new Person(‘yeeku’, ‘male’);  

//輸出Person執行個體   

alert(p.name);  

從JavaScript 1.2開始,建立對象有了一種更快捷的文法,文法如下:

var p = { "name": yeeku’,  

    "sex" : ‘male’};  

alert(p);  

這種文法就是一種JSON文法。顯然,使用JSON文法建立對象更加簡捷、友善。圖4.35顯示了這種文法示意。

<a href="http://blog.51cto.com/attachment/201206/141533522.jpg" target="_blank"></a>

在圖4.35中,建立對象object時,總以{開始,以}結束,對象的每個屬性名和屬性值之間以英文冒号(:)隔開,多個屬性定義之間以英文逗号(,)隔開。文法格式如下:

object =  

    propertyName1 : propertyValue1 ,  

    propertyName2 : propertyValue2 ,  

    ...  

必須注意的是,并不是每個屬性定義後面都有英文逗号(,),必須後面還有屬性定義時才需要逗号(,)。是以,下面的對象定義是錯誤的:

person =  

    name : ‘yeeku’,   

    sex : ‘male’,   

因為sex屬性定義後多出一個英文逗号,最後一個屬性定義的後面直接以 } 結束了,不再有英文逗号(,)。

當然,使用JSON文法建立JavaScript對象時,屬性值不僅可以是普通字元串,也可以是任何基本資料類型,還可以是函數、數組,甚至是另外一個JSON文法建立的對象。例如:

    name : 'yeeku',   

    sex : 'male',   

    //使用JSON文法為其指定一個屬性  

    son : {  

        name: 'nono',  

        grade:1 

    },  

    //使用JSON文法為person直接配置設定一個方法  

    info : function()  

    {  

        document.writeln("姓名:" + this.name + "性别:" + this.sex);  

    }  

使用JSON文法建立數組也是非常常見的情形,在早期的JavaScript文法裡,我們通過如下方式來建立數組。

//建立數組對象  

var a = new Array();  

//為數組元素指派  

a[0] = 'yeeku';  

a[1] = 'nono';  

或者,通過如下方式建立數組:

//建立數組對象時直接指派  

var a = new Array('yeeku', 'nono');  

但如果我們使用JSON文法,則可以通過如下方式建立數組:

//使用JSON文法建立數組  

var a = ['yeeku', 'nono'];  

圖4.36是JSON建立數組的文法示意。

<a href="http://blog.51cto.com/attachment/201206/144544207.jpg" target="_blank"></a>

正如圖4.36中所見到的,JSON建立數組總是以英文方括号([)開始,然後依次放入數組元素,元素與元素之間以英文逗号(,)隔開,最後一個數組元素後面不需要英文逗号,但以英文反方括号(])結束。使用JSON建立數組的文法格式如下:

arr = [value1 , value 2 ...] 

與JSON文法建立對象相似的是,數組的最後一個元素後面不能有逗号(,)。

鑒于JSON文法的簡單易用,而且作為資料傳輸載體時,資料傳輸量更小,是以在Ajax互動中,往往不使用XML作為資料交換格式,而是采用JSON作為資料交換格式。假設需要交換一個對象person,其name屬性為yeeku,gender屬性為male,age屬性為29,使用JSON文法可以簡單寫成如下形式:

    name:'yeeku',  

    gender:'male',  

    age:29 

但如果使用XML資料交換格式,則需要采用如下格式:

&lt;person&gt;  

    &lt;name&gt;yeeku&lt;/name&gt;  

    &lt;gender&gt;male&lt;/gender&gt;  

    &lt;age&gt;29&lt;/age&gt;  

&lt;/person&gt;  

對比這兩種表示方式,第一種方式明顯比第二種方式更加簡潔,資料傳輸量也更小。

當伺服器傳回一個滿足JSON格式的字元串後,我們可以利用json擴充的方法将該字元串轉換成一個JavaScript對象。登入http://www.json.org/json2.js站點,下載下傳json2.js檔案,該檔案提供了一個全局的JSON對象,該對象包含兩個方法:stringify和parse,其中前者負責把一個JSON對象轉換成JSON格式的字元串,而後者則負責把JSON格式字元串轉換成JSON對象。

繼續閱讀