首页 新闻 会员 周边 捐助

js toJSON

0
悬赏园豆:80 [已解决问题] 解决于 2013-12-15 10:32
Object.prototype.toJSON = function(){
return JSON.stringify(this);
}

({a:1}).toJSON();
为什么不行?
flybbjcs70的主页 flybbjcs70 | 初学一级 | 园豆:9
提问于:2013-12-11 17:56
< >
分享
最佳答案
-1

首先感觉这个方法的名字应该叫toJsonString,而不是坑爹的toJSON

 

至于你的方法不执行,是因为在你的代码中a:1,a只是个label,({a:1})的返回值是1,而不是你预期的json对象

改为({'a':1})

收获园豆:80
谦行 | 菜鸟二级 |园豆:473 | 2013-12-11 20:46

哥们,你先搞懂什么是json把,瞎起哄

江风. | 园豆:200 (初学一级) | 2013-12-14 11:50

@liujiangfeng007: 何出此言啊

谦行 | 园豆:473 (菜鸟二级) | 2013-12-15 10:38
其他回答(4)
-3

因为toJSON 是jquery 的一个方法了。

改个方式:

Object.prototype.toJSon = function(){
return JSON.stringify(this);
}

({a:1}).toJSon();

|WinKi| | 园豆:669 (小虾三级) | 2013-12-11 18:07
1

调试的图片如上

 

具体代码如下:

<!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> </head> <body>

</body> </html> <script type="text/javascript"> alert(typeof JSON.stringify); alert(JSON.stringify({a:1})); if (typeof Date.prototype.toJSON == 'function') { alert("日期类型已经有toJSON方法了"); }

Object.prototype.toJson = function(){ return JSON.stringify(this); }

alert({a:1}.toJson());

////////////////////////

Object.prototype.toJSON = function(){

return JSON.stringify(this); }

var str2={a:2,b:2}.toJSON();//报 堆栈溢出 </script>

------------------------

首先在IE8及以上浏览器等其它高版本的浏览器才支持JSON.stringify这个方法(本测试在IE8上做的)。

这段代码依次会弹出:

function

{"a":1}

日期类型已经有toJSON方法了

{"a":1}

然后出错,提示

SCRIPT28: 堆栈溢出
新建文本文档.html, 行27 字符1
SCRIPT2343: 堆栈溢出,位置: 第 27 行

多调试几次你就会发现问题的所在。

所以楼主prototype的toJSON方法不行,老是提示堆栈溢出,是因为javascript JSON对象的源代码中有些对象已经有toJSON这个方法了(会弹出“日期类型已经有toJSON方法了”就能说明已存在了),源代码中已有的方法我们最好不要和它命名一样。

一楼回答的代码是正确的,但是它并不是因为与jquery的方法名相同,是javascript本身中的一些对象已有这个toJSON方法了,再加上转成json字符串是有可能要递归的,你覆盖了一些toJSON方法所以提示“堆栈溢出”,楼主把方法改个名字吧(在测试代码中改成toJson就是可以的)!

最后建议最好不要直接用JSON.stringify这个方法,因为有些版本的浏览器不支持的,所以最好用jquery的,第三方的,或自己封装一个方法。

junjieok | 园豆:779 (小虾三级) | 2013-12-11 22:04

图片不清楚,重新上传一下

支持(1) 反对(0) junjieok | 园豆:779 (小虾三级) | 2013-12-11 22:07
0

不瞒你说,上面都不是什么好回答。tojson现在只有高级浏览才支持,你可以下载一个json2来支持所有浏览器。

e.e.p | 园豆:215 (菜鸟二级) | 2013-12-12 09:28

你说的是 JSON.stringify JSON.parse 吧

支持(0) 反对(0) flybbjcs70 | 园豆:9 (初学一级) | 2013-12-12 10:36

@Coolicer

晕 JSON.stringify 就是json2的一个方法好吧。。。

Object.prototype.toJSon 只是对Object 原型扩展,懂?

支持(0) 反对(0) |WinKi| | 园豆:669 (小虾三级) | 2013-12-12 17:03

@|WinKi|: 只有sb才去扩展object

支持(0) 反对(0) e.e.p | 园豆:215 (菜鸟二级) | 2013-12-12 17:05

@Coolicer: 

2货,别人的问题就是需要扩展,Object.prototype.toJSon,虽然扩展Object是不好,但别人问的问题显然不是这个。别人都用上JSON.stringify了,你才叫别人下载json2.

支持(0) 反对(0) |WinKi| | 园豆:669 (小虾三级) | 2013-12-12 17:29

@|WinKi|: 我才懒得跟你吵。在浏览器没支持的情况下,怎么用。不下载json2,哪里有这个方法,真是的。

支持(0) 反对(0) e.e.p | 园豆:215 (菜鸟二级) | 2013-12-12 17:31

@Coolicer: 

 IE8+,FF3.5+,safari4+,opera10.5+,chrome 都支持 , 如果还用比这些版本还低的话,那确实只能下载json2

支持(0) 反对(0) |WinKi| | 园豆:669 (小虾三级) | 2013-12-12 17:44
0

你是不是想用原型的方式来拓展JSON.stringify?

水晶途途 | 园豆:1443 (小虾三级) | 2013-12-12 10:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册