【问题标题】:How to ignore .toJSON function when using JSON.stringify()?使用 JSON.stringify() 时如何忽略 .toJSON 函数?
【发布时间】:2015-09-15 21:53:34
【问题描述】:

我发现如果你为一个对象定义了.toJSON() 函数,那么它就被用来对一个对象进行字符串化,而不是默认的。 有没有办法忽略这个被覆盖的函数并运行默认的字符串化过程?

【问题讨论】:

  • 我想如果你真的想覆盖 toJSON 但仍然想运行默认的 stringify,你可以遍历它们的对象并打印键?不过,您几乎可以自己实现 stringify
  • 问题是 - 我使用 Parse.com 服务的第 3 方库,该库可用于其对象。现在我需要获取一个正在使用的对象的原始表示,以便将其作为模拟对象传递给我的单元测试。但是该库定义了它的 .toJSON() 函数,出于测试目的,我想忽略它。
  • 如果是调试用的,可以用console.log(obj)吗?
  • 是的,我可以在 Chrome 控制台中将其视为树,但无法将其复制并粘贴为字符串。我尝试了这个技巧superuser.com/questions/777213/…,但它似乎用相同的方法处理它,所以我得到了用 .toJSON() 处理的结果
  • 丑陋的黑客:obj.toJSON = undefined

标签: javascript json default overriding stringify


【解决方案1】:

在指定对象中重新定义toJSON方法。例如:

    function kryptonite(key)
       {
       var replacement = {};
       for(var __ in this)
         {
         if(__ in alias)
           replacement[__] = this[__]
         }
    
       return replacement;
       }
    
    var foo, bar;
    var alias = {"Clark":"","phone":""};
    var contact = {
                   "Clark":"Kent",
                   "Kal El":"Superman",
                   "phone":"555-7777"
                  }
    
    contact.toJSON = kryptonite;

    foo = JSON.stringify(contact);

    contact.toJSON = undefined;
    
    bar = JSON.stringify(contact);

    console.log("foo: ", foo);
    console.log("bar: ", bar);

参考文献

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    • 2011-11-18
    相关资源
    最近更新 更多