覆盖 Json.stringify 以使用 json-stringify-safe

Overriding Json.stringify to use json-stringify-safe

我想覆盖 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);
};

我收到一个错误:

Maximum call stack size exceeded

此处计划的解决方案对我不起作用..

有什么想法吗?

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

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

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

Converting circular structure to Json

我想这就是你想要的。

(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,所以我们想绕过它。

哦,刚刚发现我没有输入正确的文件。我在 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);
    };
}());