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"
}
(test49-1.js)

以及

{
"inner": 3,
"outer": function () {alert('test');}
}
(test49-2.js)