emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          這個是基本的轉換例子
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE> json-to-string </TITLE>
          <META NAME="Generator" CONTENT="EditPlus">
          <META NAME="Author" CONTENT="emu">
          <META NAME="Keywords" CONTENT="json convert">
          <META NAME="Description" CONTENT="convert a javascript object into a JSON string">
          </HEAD>

          <BODY>
          <SCRIPT LANGUAGE="JavaScript">
          <!--
          var data={host:{url:"ad.market.com",page:[{name:"all",area:[{name:"rightbanner",tname:"all",tclass:"none",type:"jpg",ad:[{url:"abc.gif",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]},{name:"leftbanner",tname:"all",tclass:"none",type:"jpg",ad:[{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]}]},{name:"index.htm",area:[{name:"rightbanner",tname:"index.htm",tclass:"none",type:"swf",ad:[{url:"abcdef.swf",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]},{name:"leftbanner",tname:"index.htm",tclass:"none",type:"text",ad:[{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""},{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""},{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]}]}]}}

          function obj2str(o){
              
          var r = [];
              
          if(typeof o =="string"return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
              if(typeof o ==
          "undefined") return "undefined";
              if(typeof o == 
          "object"){
                  if(o===null) return 
          "null";
                  else if(!o.sort){
                      for(var i in o)
                          r.push(i+
          ":"+obj2str(o[i]))
                      r=
          "{"+r.join()+"}"
                  }else{
                      for(var i =0;i<o.length;i++)
                          r.push(obj2str(o[i]))
                      r=
          "["+r.join()+"]"
                  }
                  return r;
              }
              return o.toString();
          }

          alert(obj2str(data))
          //-->
          </SCRIPT>
          </BODY>
          </HTML>


          要是想重載系統的native code函數(比如toString,join),就要根據不同的瀏覽器上不同的內部函數的具體表現做特殊對待了。比如重載toString函數在IE里面是默認遍歷不到的,而firefox偏偏就可以。下面的例子在IE和firefox下面測試通過:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE> json-to-string </TITLE>
          <META NAME="Generator" CONTENT="EditPlus">
          <META NAME="Author" CONTENT="emu">
          <META NAME="Keywords" CONTENT="json convert">
          <META NAME="Description" CONTENT="convert a javascript object into a JSON string">
          </HEAD>

          <BODY>
          <SCRIPT LANGUAGE="JavaScript">
          <!--
          var data={host:{url:"ad.market.com",page:[{name:"all",area:[{name:"rightbanner",tname:"all",tclass:"none",type:"jpg",ad:[{url:"abc.gif",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]},{name:"leftbanner",tname:"all",tclass:"none",type:"jpg",ad:[{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]}]},{name:"index.htm",area:[{name:"rightbanner",tname:"index.htm",tclass:"none",type:"swf",ad:[{url:"abcdef.swf",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]},{name:"leftbanner",tname:"index.htm",tclass:"none",type:"text",ad:[{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""},{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""},{url:"",width:"",height:"",menu:"red",tran:"",href:"http://music.qq.com",alt:"aaaaaaaaa",target:"_blank",top:"",bottom:"",left:"",right:""}]}]}]},toString:function(){return obj2str(this)}}

          function obj2str(o){
              
          var r = [];
              
          if(typeof o =="string"return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\"";
              if(typeof o == 
          "object"){
                  if(!o.sort){
                      for(var i in o)
                          r.push(i+
          ":"+obj2str(o[i]));
                      if(!!document.all && !/^\n?function\s*toString\(\)\s*\{\n?\s*\[native code\]\n?\s*\}\n?\s*$/.test(o.toString)){
                          r.push(
          "toString:"+o.toString.toString());
                      }
                      r=
          "{"+r.join()+"}"
                  }else{
                      for(var i =0;i<o.length;i++)
                          r.push(obj2str(o[i]))
                      r=
          "["+r.join()+"]"
                  }
                  return r;
              }
              return o.toString();
          }
          alert(obj2str(data))
          //-->
          </SCRIPT>
          </BODY>
          </HTML>
          posted on 2007-01-04 17:30 emu 閱讀(4379) 評論(6)  編輯  收藏

          評論

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子 2007-08-15 20:29 emu
          補充一個object克隆的簡單方法,不支持function:
          function objClone(o){
          if(typeof o == "object"){
          var r=(o.sort)?[]:{}
          for(var i in o)
          r[i]=objClone(o[i]);
          return r;
          }
          return o;
          }
            回復  更多評論
            

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子 2009-04-11 15:52 谷歌
          經過測試,不支持谷歌  回復  更多評論
            

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子 2009-04-11 16:01 谷歌
          汗,我能把上面的刪除嘛,你給我刪了個,經過仔細測試,支持谷歌  回復  更多評論
            

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子 2010-07-15 11:00 lingcarlos
          遞歸用的很熟啊  回復  更多評論
            

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子[未登錄] 2011-03-15 11:12 benx203
          可不可以修改下,轉換后保持對象的key是引號引起來的啊,有的地方要求格式比較嚴格  回復  更多評論
            

          # re: 應twinsen要求寫了個轉換js對象為json字符串的例子[未登錄] 2011-03-15 11:15 benx203
          我把r.push(i+":"+obj2str(o[i]))修改成r.push("\""+i+"\":"+obj2str(o[i]))可以用了,謝謝!  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 娱乐| 寿阳县| 余干县| 化德县| 额济纳旗| 明光市| 延安市| 香河县| 综艺| 洛隆县| 嘉黎县| 雅江县| 胶南市| 调兵山市| 土默特左旗| 海城市| 交口县| 六枝特区| 通河县| 新乐市| 诏安县| 亚东县| 平泉县| 泸溪县| 彭州市| 探索| 洪洞县| 德惠市| 利辛县| 石城县| 洪湖市| 汤阴县| 乐陵市| 金溪县| 汉川市| 延寿县| 北票市| 乃东县| 仁寿县| 绍兴县| 西城区|