2012年2月6日月曜日

JSON かどうか評価する関数 isJson を作った。

結構、JSONをパースする度に、try catch して、
タブが深くなるので、
簡易的にJSONか評価する関数を作った。
ColdFusion ってやつだと、そういう関数があるみたいだけど、
Javascript ではないっぽい?
jQuery でもないっぽい?
まぁ、大して難しいものでもないので、良ければ使ってください。

var isJson = function(arg){
    arg = (typeof(arg) == "function") ? arg() : arg;
    if(typeof(arg) != "string"){return false;}
    try{arg = (!JSON) ? eval("(" + arg + ")") : JSON.parse(arg);return true;}catch(e){return false;}
}

alert(isJson(1));                 // false
alert(isJson({data:"hoge"}));     // false
alert(isJson('{"data":"hoge"}')); // true
alert(isJson("{'data':'hoge'}")); // false
alert(isJson(function(){return '{"data":"hoge"}';})); // true

ちゃんと、
'{"data":"hoge"}'

"{'data':'hoge'}"
を区別して評価してくれて良かった。

つか、JSON.parse() が出来るかどうかって、
(!JSON) で判別していいのかしら?
eval() は、昔どっかのブログでグローバルをなんちゃらとか書いてあった気がしたので、
できるだけ、JSON.parse() 使えたら使えるようにしたいんだけどもねぇ。
でも、JSON.parse() より eval() のほうが速いよ!っていうのも見た気がした。

Chrome16 と Firefox3.6.x で動作確認済みですー。

2 件のコメント: