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

这个是基本的实现:

<! DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN" >
< HTML >
< HEAD >
< TITLE > json-to-string </ TITLE >
< META NAME ="Generator" CONTENT ="EditPlus" >
< META NAME ="Author" CONTENT ="emu" >
< META NAME ="Keywords" CONTENT ="jsonconvert" >
< META NAME ="Description" CONTENT ="convertajavascriptobjectintoaJSONstring" >
</ 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(/( )/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 >
< META NAME ="Generator" CONTENT ="EditPlus" >
< META NAME ="Author" CONTENT ="emu" >
< META NAME ="Keywords" CONTENT ="jsonconvert" >
< META NAME ="Description" CONTENT ="convertajavascriptobjectintoaJSONstring" >
</ 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(/( )/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>

原文链接

你可能感兴趣的:(JavaScript,json,qq,IE,firefox)