`
riali
  • 浏览: 41611 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

应twinsen要求写了个转换js对象为json字符串的例子

阅读更多

这个是基本的实现:

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>json-to-string</TITLE>
<METANAME="Generator"CONTENT="EditPlus">
<METANAME="Author"CONTENT="emu">
<METANAME="Keywords"CONTENT="jsonconvert">
<METANAME="Description"CONTENT="convertajavascriptobjectintoaJSONstring">
</HEAD>

<BODY>
<SCRIPTLANGUAGE="JavaScript">
<!--
vardata={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:""}]}]}]}}

functionobj2str(o){
varr=[];
if(typeofo=="string")return"""+o.replace(/(['"\])/g,"\$1").replace(/( )/g,"\n").replace(/( )/g,"\r").replace(/( )/g,"\t")+""";
if(typeofo=="object"){
if(!o.sort){
r[0]="{"
for(variino){
r[r.length]=i;
r[r.length]=":";
r[r.length]=obj2str(o[i]);
r[r.length]=",";
}
r[r.length-1]="}"
}else{
r[0]="["
for(vari=0;i<o.length;i++){
r[r.length]=obj2str(o[i]);
r[r.length]=",";
}
r[r.length-1]="]"
}
returnr.join("");
}
returno.toString();
}
alert(obj2str(data))
//-->
</SCRIPT>
</BODY>
</HTML>

要是想重载系统的native code函数(比如toString,join),就要根据不同的浏览器上不同的内部函数的具体表现做特殊对待了。比如重载toString函数在IE里面是默认遍历不到的,而firefox偏偏就可以。下面的例子在IE和firefox下面测试通过:

<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<TITLE>json-to-string</TITLE>
<METANAME="Generator"CONTENT="EditPlus">
<METANAME="Author"CONTENT="emu">
<METANAME="Keywords"CONTENT="jsonconvert">
<METANAME="Description"CONTENT="convertajavascriptobjectintoaJSONstring">
</HEAD>

<BODY>
<SCRIPTLANGUAGE="JavaScript">
<!--
vardata={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(){returnobj2str(this)}}

functionobj2str(o){
varr=[];
if(typeofo=="string")return"""+o.replace(/(['"\])/g,"\$1").replace(/( )/g,"\n").replace(/( )/g,"\r").replace(/( )/g,"\t")+""";
if(typeofo=="object"){
if(!o.sort){
r[0]="{"
for(variino){
r[r.length]=i;
r[r.length]=":";
r[r.length]=obj2str(o[i]);
r[r.length]=",";
}
if(!!document.all&&!/^ ?functions*toString()s*{ ?s*[nativecode] ?s*} ?s*$/.test(o.toString)){
r[r.length]="toString:"+o.toString.toString();
r[r.length]=",";
}
r[r.length-1]="}"
}else{
r[0]="["
for(vari=0;i<o.length;i++){
r[r.length]=obj2str(o[i]);
r[r.length]=",";
}
r[r.length-1]="]"
}
returnr.join("");
}
returno.toString();
}
alert(obj2str(data))
//-->
</SCRIPT>
</BODY>
</HTML>

原文链接

分享到:
评论

相关推荐

    lba2remake:《小冒险2》在JavaScript Three.js React中实现Twinsen的Odyssey重新实现

    LBA2翻拍 一点大冒险2 / Twinsen在JavaScript中重新实现的奥德赛/ Three.js / React(或)愿景/目标阶段1:重新实现LBA2游戏引擎应该看起来和原来一样玩完全重新设计而不是基于分解的方法关注代码质量,使其易于阅读...

    lu:从 code.google.compprojects-twinsen 自动导出

    "lu:从code.google.com/p/projects-twinsen自动导出"是一个项目,它源自Google Code托管平台上的"projects-twinsen"项目,并被转换或导出到其他存储库。这个项目与Java编程语言有关,因此我们可以推测这可能是一个用...

    3D-lba2remake.zip

    3D-lba2remake.zip,小冒险2/twinsen的odyssey在javascript/3.js/react中的重新实现,3D建模使用专门的软件来创建物理对象的数字模型。它是3D计算机图形的一个方面,用于视频游戏,3D打印和VR,以及其他应用程序。

    网页制作秘招

    这段代码指定了网页的字符编码为gb2312,使得中文文字能够自动换行。 ### 第四招:定时自动跳转 有些网页会在一定时间后自动跳转到另一个页面,这可以通过在HTML头部加入`meta`标签来实现。例如: ```html ; url=...

    CSS也要语义化

    好不容易到一个周末了,原定安排是去D2的但是因为时间安排不过来,所以能抽空写写。早前的讨论不了了之,其实这一点都不是Twinsen的风格。 其实想重提下那个话题,一直都在忙这忙那的没时间。好不容易到一个周末了,...

    CSS模块化的理解

    在Twinsen Liang的博客上看到一篇名为语义化单单的限定在html么?的文章,文中主要是提及了CSS的命名规则,仔细阅读后,我认为这个其实就是模块化思想。(作者也提了这一点)。 我没有看过CSS模块化的相关书籍,所以...

    FrontEndBlogCN:前端博客相关网站搜集

    twinsen ---- 艾文王 ---- 余果 ---- 张鑫旭 ---- 大猫 ---- 飘飘 ---- 米随随 ---- 99css ---- 进步博客 ---- 万戈 ---- 任平生 ---- 小李刀刀 ---- 元云 ---- 珍妮 ---- 偷米饭 ---- 丁小倪 ---- 玉伯 ---- 拔赤 -...

Global site tag (gtag.js) - Google Analytics