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 + ")");
  }