Javascript 有没有办法阻止JSON.stringify调用toJSON?
stringify有一个功能,通过定义一个名为toJSON的函数,使对象能够定义自己的序列化 以下是MDN文档的摘录: toJSON()行为 如果正在字符串化的对象具有名为toJSON的属性,其值为 是一个函数,则toJSON()方法自定义JSON 字符串化行为:不是序列化对象,而是 调用toJSON()方法时返回的值将被序列化 有没有一种方法可以覆盖它,这样即使附加了toJSON方法,它也会忽略它们并执行“正常”序列化 原因:由于一个JS库,在我的环境中引入了一些toJson方法,它们有一些小错误。其中一些有缺陷的序列化格式已经被接受,服务器端被编码为该格式Javascript 有没有办法阻止JSON.stringify调用toJSON?,javascript,json,serialization,Javascript,Json,Serialization,stringify有一个功能,通过定义一个名为toJSON的函数,使对象能够定义自己的序列化 以下是MDN文档的摘录: toJSON()行为 如果正在字符串化的对象具有名为toJSON的属性,其值为 是一个函数,则toJSON()方法自定义JSON 字符串化行为:不是序列化对象,而是 调用toJSON()方法时返回的值将被序列化 有没有一种方法可以覆盖它,这样即使附加了toJSON方法,它也会忽略它们并执行“正常”序列化 原因:由于一个JS库,在我的环境中引入了一些toJson方法,它们有一些小
因此,我无法删除错误的方法,但是我想提示JSON.stringify忽略这些方法。如果在对象中为
toJSON
属性设置空值,它将返回默认行为
obj.toJSON = null;
如果你不想修改你的对象,你可以在修改之前复制它
var copy = Object.assign({}, obj);
obj.toJSON = null;
您可以覆盖该方法:
var fn = JSON.stringify;
JSON.stringify = function (o) {
var tmp, toJSON;
if(o.toJSON){
toJSON = o.toJSON;
o.toJSON = undefined;
}
tmp = fn.apply(this, arguments);
toJSON && (o.toJSON = toJSON);
return tmp;
};
我不打算将此作为答案发布,因为我甚至为尝试过此方法而感到羞愧,但您可以重写此方法:
null
值也被序列化,最好使用未定义的
。这取决于该方法如何附加到对象。对象可能被冻结,属性可能是可写:false
或可配置:false
,并且可能还有一些禁用覆盖方法的可能性。谢谢。。看起来很有希望。我将尝试使用它。如果在原型上定义了toJSON
,如Array.prototype.toJSON
,请注意它不起作用。您也需要在此处删除它。@SébastienDeprez我编辑代码以反映该注释,因为我也发现了继承问题。