json2.js下載:http://pan.baidu.com/s/1tHyDJjavascript
JSON 是一種數據交換格式,RFC 4627 對 JSON 進行了詳細描述。java
根據 ECMA-262(ECMAScript)第 5 版中描述,JSON 是一個包含了函數 parse 和 stringify 的簡單對象。 parse 函數用來解析一個 JSON 文本(一個 JSON 格式的字符串)到一個 ECMAScript 值(例如 JSON 對象被解析爲 ECMAScript 對象, JSON 數組被解析爲 ECMAScript 數組,其它類型以此類推);stringify 則相反,它是將一個 ECMAScript 值解析爲一個 JSON 格式的字符串, 好比將一個 ECMAScript 對象解析爲一個 JSON 對象的字符串。算法
關於 JSON 的詳細信息,請參考 RFC 4627 和 http://json.org。json
關於 JSON 對象的更多信息,請參考 ECMA-262 5th Edition 中 15.12 The JSON Object。數組
IE6 IE7 IE8(Q) 不支持 JSON 對象。瀏覽器
使用了 JSON 對象的腳本代碼在 IE6 IE7 IE8(Q) 中運行的時候可能會拋出異常,致使功能失效。安全
IE6 IE7 IE8(Q) |
---|
JSON 對象是在 ECMAScript 第 5 版中實現的,此版於 2009 年 12 月發佈;IE6 IE7 與 IE8(Q) (IE8(Q) 至關於 IE 5.5) 發佈時間比較早,沒有在其 Javascript 引擎中實現該對象。cookie
分析如下代碼:函數
<script type="text/javascript"> window.onload = function(){ var info = document.getElementById("info"); if(window.JSON){ var jsonStr = '{"name": "w3help", "url": "www.w3help.org", "tech": ["js", "HTML", "CSS", 5, 4.01, 2.1],' + '"online": true, "category": {"RCA": "Root Cause Artical", "KB":"Knowledge Base"},' + '"version": 1}', p, w3help; w3help = JSON.parse(jsonStr); for(p in w3help) info.innerHTML += p + " : " + w3help[p] + "<br/>"; info.innerHTML += JSON.stringify(w3help); } else info.innerHTML = "Not support JSON object."; } </script> <div id="info" style="width:350px;"></div>
以上代碼首先探測是否在 window 下存在 JSON 對象,而後簡單測試了 JSON 對象的 parse 和 stringify 函數並輸出(反)解析結果。執行代碼,各瀏覽器中表現以下:測試
IE8(S) Firefox Chrome Safari Opera | IE6 IE7 IE8(Q) |
---|---|
可使用 window.eval() 或 new Function(){} 的方式解析 JSON 格式字符串。如:
<script type="text/javascript"> window.onload = function(){ var info = document.getElementById("info"), jsonStr = '{"name": "w3help", "url": "www.w3help.org", "tech": ["js", "HTML", "CSS", 5, 4.01, 2.1],' + '"online": true, "category": {"RCA": "Root Cause Artical", "KB":"Knowledge Base"},' + '"version": 1}', p, w3help; //使用兩種簡單的方式解析 JSON 格式字符串 json1 = eval("(" + jsonStr + ")"), json2 = (new Function("return " + jsonStr))(); for(p in json1) info.innerHTML += p + " : " + json1[p] + "<br/>"; info.innerHTML += "-----------------------<br />"; for(p in json2) info.innerHTML += p + " : " + json2[p] + "<br/>"; } </script> <div id="info" style="width:350px;"></div>
各瀏覽器中表現以下:
全部瀏覽器 |
---|
可見,以上代碼能夠做爲 JSON.parse() 跨瀏覽器的簡單替換方案。一樣 JSON.stringify() 能夠經過判斷類型加算法實現,這裏再也不贅述。
須要注意的是,這種解析 JSON 格式字符串的簡單實現存在安全問題,被插入的惡意 JSON 字符串(好比獲取用戶的 cookie 信息)可能被解析並執行。 可使用一些通過驗證的安全成熟的的解決方案,例如 json2.js 中的 JSON.parse() 或 jQuery.parseJSON()。