■
JavaScriptオブジェクトからJSON文字列に変換するプログラム作成。
たぶんちゃんと動くよ。w
気になる点あるけど、いちお自分自身でオブジェクトに復元できるからOKだけど、何か問題あるかな???
型に応じた処理記述してるからもうひとクラスはさんで、json_handlerとかxml_handler渡して変換できたほうがいいかなぁ〜
つうかJavaScriptまだまだ未熟者だけど、何この型チェック!!
instanceofだのtypeofだのやるならちゃんとヤレ!
function BaseClass() {} BaseClass.prototype = new Object(); function Json() { this.stack = new Array(); } Json.prototype = new BaseClass(); Json.prototype.isString = function(primitive_object){ this.stack.push("\""); this.stack.push(primitive_object); this.stack.push("\""); } Json.prototype.isNumber = function(primitive_object){ this.stack.push(primitive_object); } Json.prototype.isFunction = function(primitive_object){ this.stack.push(primitive_object); } Json.prototype.isBoolean = function(primitive_object){ this.stack.push(primitive_object); } Json.prototype.isObject = function(primitive_object){ this.stack.push("{"); for(key in primitive_object){ this._parser(key,this.stack); this.stack.push(":"); this._parser(primitive_object[key],this.stack); this.stack.push(","); } this.stack.push("}"); } Json.prototype.isArray = function(primitive_object){ this.stack.push("["); for(key in primitive_object){ this._parser(primitive_object[key],this.stack); this.stack.push(","); } this.stack.push("]"); } // ToDo Json.prototype.isDate = function(primitive_object){ } // ToDo Json.prototype.isMath = function(primitive_object){ } // ToDo Json.prototype.isValueOf = function(primitive_object){ } Json.prototype.parser = function(object){ this.stack = new Array(); this._parser(object); return this.stack; } Json.prototype._parser = function(object){ switch(true){ case ( object instanceof Array ): this.isArray(object); break; case ( object instanceof Function ): this.isFunction(object); break; case ( object instanceof Date ): this.isDate(object); break; //case ( object instanceof Math ): this.isMath(object); break; case ( object instanceof Object ): this.isObject(object); break; default: switch(true){ case typeof(object) == 'boolean': this.isBoolean(object); break; case typeof(object) == 'string': this.isString(object); break; case typeof(object) == 'number': this.isNumber(object); break; default: break; } break; } } Json.prototype.toString = function(object){ return this.parser(object).join(''); } Json.prototype.toObject = function(string){ return eval("(" + string + ")"); }