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()
该对象,然后在浏览器控制台中交互浏览。