2009/11/24 追記
このJSONの変換処理は時代遅れとなっています。
最新の動向を知りたい方は、以下のキーワードで検索する事をお勧めします。
「JSON.stringify」「JSON.parse」「json2.js」
追記終わり
最新の動向を知りたい方は、以下のキーワードで検索する事をお勧めします。
「JSON.stringify」「JSON.parse」「json2.js」
追記終わり
JSONのエンコード処理時、バックスラッシュエスケープのユニコード文字への変換を行うメソッドを追加した。そもそもJSON変換時、文字列は一部の該当するもののみの変換で良いと思っていたが、どうも全ての変換が必要のようだ。しかし、一部の変換でもJavaScriptは受け付ける事が可能であり、全てをユニコード文字へ変換するとデータ量が増えてしまうデメリットもあるため、古いメソッドは残すことにする。
/*
================================================================================
Name : JSON
In : [none]
Out : [none]
Note : JSONユーティリティ群
--------------------------------------------------------------------------------
Version : Ver1.0.0 | 2006/12/04 | 新規作成
: Ver1.1.0 | 2007/02/17 | [JSON.EncodeComplete]を追加
--------------------------------------------------------------------------------
License : MIT 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.EncodeComplete
= 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.JavaScriptComplete(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 | 新規作成
: Ver1.1.0 | 2007/02/17 | [JSON.EncodeComplete]を追加
--------------------------------------------------------------------------------
License : MIT 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.EncodeComplete
= 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.JavaScriptComplete(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;
}