json.js試用
Mon, 30 Apr 2007 17:16:54 +0800這一支程式是從http://www.json.org/json.js網站來的。
json.js為array、object、boolean、number、string物件提供了toJSONString方法,可以把這些物件轉成JSON格式的字串。另外為string物件提供了parseJSON方法,讓使用者可以將JSON字串轉換成陣列或物件。
除了將JSON轉換成物件或陣列外,parseJSON方法還會做一些檢查,碰到不合法的JSON字串就會拋出例外。例如字串中如果有函數運算子,就會被檢查出來。parseJSON方法還可用傳入function reference的方式來加入filter,做一些額外的檢查。這些就是json.js全部的功能。使用json.js有一些方便的地方,除了方便做字串的轉換,最重要的還是檢查字串是否符合json的標準,減少受到xss攻擊的一些風險。
據說toJSONString跟parseJSON有可能成為ECMAScript第四版的標準,json.js是一個參考的實作。(參考http://www.json.org/json.js中的說明)
恩,不多說了,先來試試吧。我想試驗用xmlhttp取得js檔案,然後交給parseJSON函數處理。所以先用script標籤引入json.js,然後用幾個方法測試:
function xmlhttp() { try{return new ActiveXObject("Msxml2.XMLHTTP");} catch(e){} try{return new ActiveXObject("Microsoft.XMLHTTP");} catch(e){} try{return new XMLHttpRequest();} catch(e){} alert("XMLHttpRequest Object not existed!!"); return null; } function useScript (name) { try { var loader = xmlhttp(); loader.open('GET', name, false); loader.send(null); var str = loader.responseText.toString(); return str.parseJSON(); } catch (e) { alert(e); } finally { loader = null; } } function test1 (name) { try { var nav = useScript(name); var str = ""; for (var i in nav) { str += i + " : " + nav[i] + "n"; } if (str) { alert(str); } } catch (e) { alert(e); } }
xmlhttp這個函數會根據用的是ie或是firefox/mozilla傳回一個xmlhttp/xmlhttprequest物件。useScript函數會根據傳入的參數用xmlhttp的方法來取得js檔案,並傳回用parseJSON轉換出來的物件。test1函數會把要處理的js檔名傳給useScript函數以獲得物件/陣列,然後用for in來probe他的成員。
這裡是一個例子:http://www.fillano.idv.tw/test49.html
兩支測試的js分別為:
{ "inner": 3, "outer": "test" }
以及
{ "inner": 3, "outer": function () {alert('test');} }