有没有办法阻止JSON.stringify调用toJSON?

时间:2017-03-20 13:09:12

标签: javascript json serialization

JSON.stringify有一个功能,通过定义名为toJSON的函数,使对象能够定义自己的序列化。

以下是MDN文档的摘录:

  

toJSON()行为

     

如果要进行字符串化的对象具有名为toJSON的属性,其值为   是一个函数,然后toJSON()方法自定义JSON   字符串化行为:而不是被序列化的对象,   调用时toJSON()方法返回的值将被序列化。

有没有办法覆盖它,所以即使附加了toJSON方法,它也会忽略它们并执行“正常”操作。序列化?

原因:由于JS库,我的环境中引入了一些带有小错误的toJson方法。其中一些错误的序列化格式已被接受,服务器端编码为该格式。

所以,我无法删除错误的方法,但是我想暗示JSON.stringify忽略这些方法。

2 个答案:

答案 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;