这个是基本的实现:
<!
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>
原文链接