【问题标题】:Overriding Json.stringify to use json-stringify-safe覆盖 Json.stringify 以使用 json-stringify-safe
【发布时间】:2020-11-27 02:27:08
【问题描述】:

我想重写 JSON.stringify 以使用 json-stringify-safe 模块以避免出现循环错误。

这是我的代码:

(function () {
    const getSerialize = require('json-stringify-safe');
    const stringifyCore = JSON.stringify;
    JSON.stringify = (obj, replacer, spaces, cycleReplacer) => {
        return stringifyCore.apply(this, [obj, getSerialize(replacer, cycleReplacer), spaces]);
    };
}());

我也试过了:

const getSerialize = require('json-stringify-safe');

const stringifyCore = JSON.stringify;
JSON.stringify = function (obj, replacer, spaces, cycleReplacer) {
    return stringifyCore(obj, getSerialize(replacer, cycleReplacer), spaces);
};

我收到一个错误:

超过最大调用堆栈大小

这里的解决方案对我不起作用.. Overriding JSON.stringify causing error

有什么想法吗?

【问题讨论】:

  • 如果你需要使用this,你可能不想使用箭头函数。
  • 在我的第二个代码中,我没有使用箭头函数,甚至没有这个
  • 这个实现的目标是什么?我正在查看readme,它看起来应该是替代品。看起来你正在尝试做其他事情。
  • 您可能打算从函数中调用getSerialize 函数。也许你需要做const {getSerialize} = require(...);
  • 此实现的目标是在我的应用程序中继续使用 JSON.stringify,而不是更改所有从 json-stringify-safe 模块中对 stringify 函数的引用

标签: json overriding stringify


【解决方案1】:

第一个问题通过将 getSerialize 函数的要求更改为:

const {getSerialize} = require('json-stringify-safe');

现在,我有另一个问题,我希望将其应用于我的所有应用程序,但它似乎不起作用,因为我继续收到此错误:

将循环结构转换为Json

【讨论】:

    【解决方案2】:

    我想这就是你想要的。

    (function () {
        const {getSerialize} = require('json-stringify-safe');
        const _stringify = JSON.stringify;
        JSON.stringify = (obj, replacer, spaces, cycleReplacer) =>
            _stringify(obj, getSerialize(replacer, cycleReplacer), spaces);
    }());
    

    库的重点是使用它而不是基本的JSON.stringify() 函数。从the code 来看,它内部已经使用JSON.stringify,所以我们想绕过它。

    【讨论】:

      【解决方案3】:

      哦刚刚发现我没有输入正确的文件。我在 webpack.config.js 上尝试了这个(这是一个 AngularJS 项目)。我将它移到了我的 app.js 文件中,它可以工作。

      这是我在 App.js 中的解决方案

      (function () {
          const {getSerialize} = require('json-stringify-safe');
          
          const stringifyCore = JSON.stringify;
          JSON.stringify = function (obj, replacer, spaces, cycleReplacer) {
              return stringifyCore(obj, getSerialize(replacer, cycleReplacer), spaces);
          };
      }());
      

      【讨论】:

        猜你喜欢
        • 2017-03-27
        • 2019-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 2018-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多