それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

JSON をシリアライズ・デシリアライズ で関数を含めてObjectをコピーする

以前、JSONのstringify の 第二引数の話を書いた。

takuya-1st.hatenablog.jp

そういえば、完成形を書いてない。

JSONで関数も含めてシリアライズする例はこれ。

関数も含めてシリアライズしてコピーする。

var a = {
  name: "takuya",
  say: function() { console.log( this.name ) },
  tel : { name:'iphone', display: function(){ console.log(this.name) } }
}
var str = JSON.serialize(a)
var b = JSON.deserialize(str)
b.say() // => takuya

serialize/ deserialize はこれ。

//serialize/deserialize ツール
JSON.serialize = function(obj){
  try{
    var str =  JSON.stringify(obj, function replacer (k,v){
        if(typeof v === "function"){ return v.toString() };
        return v ;
      })
    return str

  }catch(e){
    return "";
  }
}
JSON.deserialize=function(str){
  try{
    var obj = JSON.parse( str ,function reciever (k,v ) {

    if ( typeof v === "string" && v.match(/^function/) ){
        return Function.call(this, "return "+ v  )();
      }
      return v
    })

    return obj;


  }catch(e){
    return null
  }
}

こういうの、公式にアレば良いんだけどなかったんだっけ?