元派遣プログラマの自称技術系ブログです。雑記とか自作のオープンソースプロジェクトの話とか。
Javaとか組込とかできます。お仕事ください。

JavascriptをJSONに変換する

JSONをテキストでごりごり書くのが面倒になってきたので、
直接変換するコードを書いた。

function CJsonWriter(){
  }
  CJsonWriter.prototype=
  {
    _crlf_enable:true,
    SetCrlfEnabled:function(i_flag){
      this._crlf_enable=i_flag;
    },
    //i_objectをi_nameという名前のJSON文字列へ変換する
    ToJsonString:function(i_object,i_name)
    {
      var rt=this._crlf_enable?'\r\n':'';
      return i_name+':'+this._Value2Json(i_object);
    },
    _Object2Json:function(i_obj,is_array)
    {
      var result='';
      var is_first=true;
      for(var i in i_obj){
        if(!is_first){
          result+=',';
        }
        if(!is_array){
          result+='"'+i+'":';
        }
        result+=this._Value2Json(i_obj[i]);
        is_first=false;
      }
      return result;
    },
    _Value2Json:function(i_obj)
    {
      var rt    =this._crlf_enable?'\r\n':'';
      switch(typeof i_obj)
      {
      case 'number':
      case 'boolean':
        return i_obj+rt;
      case 'string':
        return '"'+i_obj.split('"').join('\\"')+'"'+rt;
      case 'object':
        if(i_obj==null){
          return 'null'+rt;
        }else if(i_obj instanceof Array){
          return '['+rt+this._Object2Json(i_obj,true)+']'+rt;
        }else{
          return '{'+rt+this._Object2Json(i_obj,false)+'}'+rt;
        }
      default:
        throw "JsonConvert failed!";
      }
    }
  }

使い方

  var test={
    a:false,
    b:100,
    d:{
      r:[0,1,false],
      f:'"""""""""""""""""'
    },
    e:null,
    f:[1,2,3,['a','b','c'],{at:1,at2:2}]
  }
  var t=new CJsonWriter();
  t.SetCrlfEnabled(true);
  alert(t.ToJsonString(test,"test"));