JSON stringify使用什么toString函数?

时间:2014-01-04 19:55:35

标签: javascript json

我想为数据类型创建自己的toString函数。

我们举一个例子:

JSON.stringify({}) // "{}"

我想要"test"返回。所以,我试图修改对象原型:

Object.prototype.toString = function () { return "test"; }

然后:JSON.stringify({})也会返回"{}"

我确信有一个函数可以重写以返回自定义值。

那是什么功能?

1 个答案:

答案 0 :(得分:12)

   function MyObj() {};
   MyObj.prototype.toJSON = function(){return "test";}

   JSON.stringify(new MyObj())
   ""test""

JSON在其字符串化的对象上查找toJSON函数。但请注意,您不会从toJSON返回一个字符串,而是返回一个字符串化的对象来代替您传入的对象。在这种情况下,我返回了一个字符串,这就是为什么返回值在它周围有额外的引号。

你也可以使用传递给stringify的翻译函数做同样的事情。

var x = {};
JSON.stringify(x, function(key, value){ 
    if (value===x) {return "test";} else {return value;}
});
""test""

有关翻译功能的更多信息,请参阅Using native JSON