Javascript 如何在JSON中找到循环结构。stringify:UncaughtTypeError:将循环结构转换为JSON?

Javascript 如何在JSON中找到循环结构。stringify:UncaughtTypeError:将循环结构转换为JSON?,javascript,json,circular-reference,Javascript,Json,Circular Reference,当我在大型结构上得到uncaughttypeerror:Converting circular structure to JSON时,可能很难找到循环引用的确切位置 是否有一种简单的方法来查找/调试数据结构中的循环元素?我还没有找到一种简单的方法来执行此操作,其他人似乎建议使用JSON.stringify中的自定义替换函数来控制访问了哪些属性 我试图写这样的替代品: function detector(obj) { function collector (stack, key, val)

当我在大型结构上得到
uncaughttypeerror:Converting circular structure to JSON
时,可能很难找到循环引用的确切位置


是否有一种简单的方法来查找/调试数据结构中的循环元素?

我还没有找到一种简单的方法来执行此操作,其他人似乎建议使用JSON.stringify中的自定义替换函数来控制访问了哪些属性

我试图写这样的替代品:

function detector(obj) {
    function collector (stack, key, val) {
        var idx = stack[stack.length - 1].indexOf(key);

        try {
            var props = Object.keys(val);
            if (!props.length) throw props;
            props.unshift({idx : idx});
            stack.push(props);
        } catch (e) {
            while (!(stack[stack.length - 1].length - 2)) {
                idx = stack[stack.length -1][0].idx;
                stack.pop();
            }

            if (idx + 1) {
                stack[stack.length - 1].splice(idx, 1);
            }
        }

        return val;
    }

    var stack = [[]];

    try {
        JSON.stringify(obj, collector.bind(null, stack));
    } catch (e) {
        if (e.message.indexOf('circular') !== -1) {
            var idx = 0;
            var path = '';
            var parentProp = '';
            while(idx + 1) {
                idx = stack.pop()[0].idx;
                parentProp = stack[stack.length - 1][idx];
                if (!parentProp) break;
                path = '.' + parentProp + path;
            }

            console.log(path);
        }
    }
}
它所做的是在遍历JSON树(可能是树:)时,它收集已访问属性的名称,一旦JSON.stringify检测到循环引用并抛出,“stack”变量将包含它正在遍历的子树的跟踪。并将此路径记录到控制台

但是,这不是一个经过严格测试的解决方案。

如果它不是太大,您可以只
console.dir()
该对象,然后在浏览器控制台中交互浏览。