pillar0514 2009年08月14日
发布一个对象深层转化为字符串的函数
最近时常需要将对象转为字符串,网上的方法中,著名的JSONStringify只能浅层转换。另外一个朋友用prototype更改了对象的toString方法导致一些运行库运行不良。(比如在jquery下报错)

由此为这个需要重新编写函数,跟大家分享。

相信可以适应大部分状况了,欢迎大家帮忙测试。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>对象转换为字符串函数</title>
</head>

<body>
</body>
</html>
<script type="text/javascript">

/*******************************************************
函数名: ToJSON
功 能: 将对象深层转换为字符串。
参 数: o : 待转换对象
返 回: 转换生成的字符串
举 例: var obj = {a:1,b:[1,2]};alert(ToJSON(obj));
*******************************************************/
function ToJSON(o){

function isNumber(obj){
return (typeof obj=='number')&&obj.constructor==Number;
}

function isString(str){
return (typeof str=='string')&&str.constructor==String;
}

function JSONstringify(tobj){
if(tobj instanceof Array){
return AtoJSON(tobj);
}else if(isString(tobj)){
return StoJSON(tobj);
}else if(tobj instanceof Function){
return tobj.toString();
}else if(tobj instanceof Boolean){
return tobj.toString();
}else if(isNumber(tobj)){
return tobj.toString();
}else if(tobj instanceof RegExp){
return tobj.toString();
}else if(tobj instanceof Date){
return tobj.toString();
}else if(tobj instanceof Object){
return OtoJSON(tobj)
}else{
return '"'+tobj.toString()+'"';
}
}

function OtoJSON(obj){
var json = [];
var i;
for(i in obj){
if(!obj.hasOwnProperty(i)){
continue;
}
json.push(
JSONstringify(i) + ":" +
((obj[i] != null) ? JSONstringify(obj[i]) : "null")
)
}
return "{" + json.join(",") + "}";
}

//数组转换为json str
function AtoJSON(arr){
for(var i=0,json=[],j=arr.length;i<j;i++){
json[i] = (arr[i] != null) ? JSONstringify(arr[i]) : "null";
}
return "["+json.join(",")+"]";
}

//字符串格式化并转换为json str
function StoJSON(s){
return '"' +
s.replace(/(\\|\")/g,"\\$1")
.replace(/\n|\r|\t/g,function(){
var a = arguments[0];
return (a == '\n') ? '\\n':
(a == '\r') ? '\\r':
(a == '\t') ? '\\t': ""
}) +
'"';
}

return JSONstringify(o);
}

var test = {
a:["asdf",function(){return 123;},/asdf/g,123],
b:"asdfadfsaf",
c:function(){
var arr = [123,333];
return arr;
},
d:{
aa:[1,2,3,"a","b",function(){return 0;},{aaa:1,bbb:["sss",1]}],
bb:"test"
}
};

alert(ToJSON(test));

</script>

...全文
88 点赞 收藏 4
写回复
4 条回复

还没有回复,快来抢沙发~

发动态
发帖子
JavaScript
创建于2007-09-28

5.1w+

社区成员

22.3w+

社区内容

Web 开发 JavaScript
社区公告
暂无公告