JSON基礎知識與Javascript解析方式分析打賞

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

JSON建構于兩種結構:

1、“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為對象(object),紀錄(record),結構(struct),字典(dictionary),哈希表(hash table),有鍵列表(keyed list),或者關聯數組 (associative array)。
2、值的有序列表(An ordered list of values)。在大部分語言中,它被理解為數組(array)。
這些都是常見的數據結構。事實上大部分現代計算機語言都以某種形式支持它們。這使得一種數據格式在同樣基于這些結構的編程語言之間交換成為可能。

JSON其實是后XML時代的產物,在XML被大家廣泛接受的時候,人們開始注意到XML的冗余數據了,所以有人就在想一些XML的變種,什么BinaryXML之類的,JSON差不多就在這個年代出生了。
我們先看一個XML:

<request>
<firstName>Zhang</firstName>
<lastName>San</lastName>
<email>[email protected]</email>
</request>

這個XML中,每個標簽都出現了2次,用了這么多流量了,何況中國這網絡,當然比俄羅斯用鐵絲當網線好,哈哈。
那么對應的JSON會是什么樣子的呢?將上面xml例子轉為json即為:

{"firstName":"Zhang","lastName":"San","email":"[email protected]"}

這樣標簽只出現了一次,節約了點兒空間,名稱:值,成對出現.來個復雜點兒的例子:

{ "people": [
{ "firstName": "Zhang", "lastName":"San", "email": "[email protected]" },
{ "firstName": "Li", "lastName":"Si", "email": "[email protected]" },
{ "firstName": "Wang", "lastName":"Wu", "email": "[email protected]" }
]}

一個標簽下面有多個標簽的時候用[]來括起來。有點兒基礎的朋友看了這個介紹應該都會了,我也不繼續往下面說了,也沒有什么好說的了。 接下來看看JS中怎么使用JSON。
JSON是JavaScript對象描述符號(object literal notation)的一個子集。正因為JSON是JavaScript的子集,所以在JavaScript中我們可以很容易的使用它。并且不需要什么第三方文件就能夠解析。
下為json聲明的例子

var myJSONObject = {"bindings": [
{"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"},
{"ircEvent": "PRIVMSG", "method": "deleteURI", "regex": "^delete.*"},
{"ircEvent": "PRIVMSG", "method": "randomURI", "regex": "^random.*"}
]};

這個例子中,創建了一個對象,它只包含一個成員“bindings”。“bindings”是一個包含了3個對象的數組,而這每個對象都有"ircEvent"、"method"和"regex"3個成員。

這些成員可以用“.”或subscript 操作得到。

myJSONObject.bindings[0].method // "newURI"

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

var myObject = eval('(' + myJSONtext + ')');

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

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

var myObject = myJSONtext.parseJSON();

而JSON的字符串轉換器(stringifier)則作相反的工作,它將JavaScript數據結構轉換為JSON文本。JSON是不支持循環數據結構的,所以注意不能把循環的結構交給字符串轉換器。

var myJSONText = myObject.toJSONString();

另外,在JS中,任何Obj都有toJSONString()方法,下為JSON元素轉換字符串示例:

String newJSONtext = people.toJSONString();

這里是JSON官方網站提供的一個開源的javascript下JSON解析器和字符串轉換器json2.js,有需要的可以下載試試。

JSON基礎知識與Javascript解析方式分析
文章《JSON基礎知識與Javascript解析方式分析》二維碼
  • 微信打賞
  • 支付寶打賞

已有9條評論

  1. 藏章博客

    的確這種格式使用還是挺多的,尤其是在面向對象的編程的時候傳送數據比較好

    2012-08-12 23:13 回復
    • 樸人博客

      這個不熟悉,我之前一直用xml。json接觸太少了。

      2012-08-12 23:56 回復
      • 藏章博客

        嗯嗯,使用多了就好了,在js中三種傳送數據的方式,json,xml,字符串,其實用哪個都差不多,面向對象編程的時候都是json

        2012-08-13 10:12 回復
  2. 雪心

    貌似Json效率確實高點。不過還是習慣了xml了。沒做大量數據。

    2012-08-07 09:12 回復
    • 樸人博客

      嗯,是的。但是一般初學好像都用xml,不知道為什么。

      2012-08-07 09:16 回復
  3. 搜趣軟件

    mark了,Javascript解析json經常用到。

    2012-07-29 11:34 回復
  4. 搜趣軟件

    mark了,Javascript解析json經常用到。

    2012-07-29 11:34 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖