JSON.stringify有一个功能,通过定义名为toJSON的函数,使对象能够定义自己的序列化。
以下是MDN文档的摘录:
toJSON()行为
如果要进行字符串化的对象具有名为toJSON的属性,其值为 是一个函数,然后toJSON()方法自定义JSON 字符串化行为:而不是被序列化的对象, 调用时toJSON()方法返回的值将被序列化。
有没有办法覆盖它,所以即使附加了toJSON方法,它也会忽略它们并执行“正常”操作。序列化?
原因:由于JS库,我的环境中引入了一些带有小错误的toJson方法。其中一些错误的序列化格式已被接受,服务器端编码为该格式。
所以,我无法删除错误的方法,但是我想暗示JSON.stringify忽略这些方法。
答案 0 :(得分:2)
您可以覆盖该方法:
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;
};
答案 1 :(得分:1)
如果在对象中使toJSON
属性为空,它将返回默认行为
obj.toJSON = null;
如果您不想修改对象,可以在
之前复制它var copy = Object.assign({}, obj);
obj.toJSON = null;