天天看點

2、JSON基礎知識總結(2)

JSON定義<?xml:namespace prefix = o />

JSON(JavaScript Object Notation) 是一種輕量級的資料交換格式,易于閱讀和編寫,同時也易于機器解析和生成。它基于ECMA262語言規範(1999-12第三版)中JavaScript 程式設計語言的一個子集。 JSON采用與程式設計語言無關的文本格式,但是也使用了類C語言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的習慣,這些特性使JSON成為理想的資料交換格式。

JSON是JavaScript對象描述符号(object literal notation)的一個子集。

JSON的結構基于下面兩點

• 1. "名稱/值"對的集合 不同語言中,它被了解為對象(object),記錄(record),結構(struct),字典(dictionary),哈希表(hash table),鍵清單(keyed list)等

• 2. 值的有序清單 多數語言中被了解為數組(array)

JSON 文法

AJAX(asynchronous javascript and xml”(異步javascript和xml),是指一種建立互動式網頁應用的網頁開發技術)是目前流行web開發技術,它利用用戶端腳本向伺服器發送請求,而伺服器隻檢索這一請求代替以往檢索整個頁面的請求,同時伺服器編譯的資料量也減少了,進而使得伺服器響應變得更快了。

這些請求通常檢索格式化的xml來響應,然後JavaScript代碼分析xml響應來顯示結果,使得JavaScript代碼複雜化了。這個時候新的事物出現了,JSON(JavaScript Object Notation),它能使JavaScript輕松的讀取複雜的資料結構。

特點:

1、簡單格式化的資料交換

2、易于人們的讀寫習慣

3、易于機器的分析和運作

4、JavaScript中使用eval()方法可以很友善的讀取 JSON資料

5、JSON支援的語言ActionScript, C, C#, ColdFusion, E, Java, JavaScript, ML, Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Lua. [6]

文法分析:

JSON可以用于封裝資料,它是一種類似于C語言家族的語言,是以能很容易被C語言家族的語言分析

1、對象object包含在一對{}中 //類似定義結構體,有類型,有變量

2、對象的屬性member使用[string : value]成對的表示,屬性與屬性之間用逗号隔開,如:

string : value , string : value

3、數組array包含在一對[]中,如:

[ elements ]

4、元素elements與元素之間用逗号隔開

elements , elements

5、元素值可具有的類型:

string, number, object, array, true, false, null

JSON

{"menu": {

"id": "file",

"value": "File:",

"popup": {

"menuitem": [

{"value": "New", "onclick": "CreateNewDoc()"},

{"value": "Open", "onclick": "OpenDoc()"},

{"value": "Close", "onclick": "CloseDoc()"}

]

}

XML

<menu id="file" value="File" >

<popup>

<menuitem value="New" onclick="CreateNewDoc()" />

<menuitem value="Open" onclick="OpenDoc()" />

<menuitem value="Close" onclick="CloseDoc()" />

</popup>

</menu>

對象是一個無序的“‘名稱/值’對”集合。一個對象以“{”(左括号)開始,“}”(右括号)結束。每個“名稱”後跟一個“:”(冒号);“‘名稱/值’ 對”之間使用“,”(逗号)分隔。[7]

數組是值(value)的有序集合。一個數組以“[”(左中括号)開始,“]”(右中括号)結束。值之間使用“,”(逗号)分隔。

值(value)可以是雙引号括起來的字元串(string)、數值(number)、true、false、 null、對象(object)或者數組(array)。這些結構可以嵌套。

字元串(string)是由雙引号包圍的任意數量Unicode字元的集合,使用反斜線轉義。一個字元(character)即一個單獨的字元串(character string)。字元串(string)與C或者Java的字元串非常相似。

數值(number)也與C或者Java的數值非常相似。除去未曾使用的八進制與十六進制格式。除去一些編碼細節。

可以使用eval()函數的eval()方法調用JavaScript的編譯器把JSON文本轉變成對象。因為JSON是JavaScript的一個确切的子集,編譯器可以正确地解析JSON文本,然後生成一個對象結構。

eval函數的執行效率很高。然而,它能夠編譯、執行任何的JS程式,是以這樣會有安全問題。在來源可信的時候才需要使用eval,這通常是伺服器提供基礎頁面和JSON資料的web應用程式中的情形。而很多情況中,來源是不可信的。特别是永遠都不要信任用戶端。

如果關心安全的話,那最好是使用JSON解析器了(js腳本中有解析功能的函數)。JSON解析器隻認可JSON文本,是以它比較安全。

而JSON的字元串轉換器(stringifier)則作相反的工作,它将JavaScript資料結構轉換為JSON文本。JSON是不支援循環資料結構的,是以注意不能把循環的結構交給字元串轉換器。[8]