2009/11/24 追記
このJSONの変換処理は時代遅れとなっています。
最新の動向を知りたい方は、以下のキーワードで検索する事をお勧めします。
「JSON.stringify」「JSON.parse」「json2.js」
追記終わり
最新の動向を知りたい方は、以下のキーワードで検索する事をお勧めします。
「JSON.stringify」「JSON.parse」「json2.js」
追記終わり
JavaScriptのObjectをJSONに変換するクラス。JSONの規格外のオブジェクト(Functionオブジェクト等)はnullとして処理するので注意。Collection & Copy - JSON入門に詳しい日本語訳があるので興味のある方は参照してほしい。逆の処理をするevalもついでにラッピング。こちらはFunctionも認識してしまう。
/*
================================================================================
Name : JSON
In : [none]
Out : [none]
Note : JSONユーティリティ群
--------------------------------------------------------------------------------
Version : Ver1.0.0 | 2006/12/04 | 新規作成
--------------------------------------------------------------------------------
License : New BSD license
URL : www.kanasansoft.com
================================================================================
*/
/*--------------------------------------------------------------------------------
コンストラクタ
--------------------------------------------------------------------------------*/
function JSON(){
}
/*--------------------------------------------------------------------------------
JSONエンコードを行なう
--------------------------------------------------------------------------------*/
JSON.Encode
= function(obj){
var rtn;
if(obj==null){
rtn = "null";
}else{
switch(obj.constructor){
case Boolean:
rtn = obj?"true":"false";
break;
case Number:
rtn = isNaN(obj)||!isFinite(obj)?"null":obj.toString(10);
break;
case String:
rtn = "\""+StringUtility.Encode.JavaScript(obj)+"\"";
break;
case Array:
var buf = [];
for(var i=0;i<obj.length;i++){
//再帰呼出
buf.push(arguments.callee(obj[i]));
}
rtn = "["+buf.join(",")+"]";
break;
case Object:
var buf = [];
for(var key in obj){
//Object汚染回避判定有
if(obj.hasOwnProperty(key)){
//再帰呼出
buf[buf.length] = arguments.callee(key)+":"+arguments.callee(obj[key]);
}
}
rtn = "{"+buf.join(",")+"}";
break;
default:
rtn = "null";
break;
}
}
return rtn;
}
/*--------------------------------------------------------------------------------
JSONデコードを行なう
--------------------------------------------------------------------------------*/
JSON.Decode
= function(str){
var rtn;
eval("rtn="+str);
return rtn;
}
================================================================================
Name : JSON
In : [none]
Out : [none]
Note : JSONユーティリティ群
--------------------------------------------------------------------------------
Version : Ver1.0.0 | 2006/12/04 | 新規作成
--------------------------------------------------------------------------------
License : New BSD license
URL : www.kanasansoft.com
================================================================================
*/
/*--------------------------------------------------------------------------------
コンストラクタ
--------------------------------------------------------------------------------*/
function JSON(){
}
/*--------------------------------------------------------------------------------
JSONエンコードを行なう
--------------------------------------------------------------------------------*/
JSON.Encode
= function(obj){
var rtn;
if(obj==null){
rtn = "null";
}else{
switch(obj.constructor){
case Boolean:
rtn = obj?"true":"false";
break;
case Number:
rtn = isNaN(obj)||!isFinite(obj)?"null":obj.toString(10);
break;
case String:
rtn = "\""+StringUtility.Encode.JavaScript(obj)+"\"";
break;
case Array:
var buf = [];
for(var i=0;i<obj.length;i++){
//再帰呼出
buf.push(arguments.callee(obj[i]));
}
rtn = "["+buf.join(",")+"]";
break;
case Object:
var buf = [];
for(var key in obj){
//Object汚染回避判定有
if(obj.hasOwnProperty(key)){
//再帰呼出
buf[buf.length] = arguments.callee(key)+":"+arguments.callee(obj[key]);
}
}
rtn = "{"+buf.join(",")+"}";
break;
default:
rtn = "null";
break;
}
}
return rtn;
}
/*--------------------------------------------------------------------------------
JSONデコードを行なう
--------------------------------------------------------------------------------*/
JSON.Decode
= function(str){
var rtn;
eval("rtn="+str);
return rtn;
}
追記(2007/07/07)
バージョンアップしたものが下記リンク先で公開済。