5
當我在一個大結構上得到Uncaught TypeError: Converting circular structure to JSON
時,很難找出圓形參考的確切位置。如何在JSON.stringify中找到循環結構:未捕獲的TypeError:將循環結構轉換爲JSON?
有沒有簡單的方法來查找/調試數據結構中的圓形元素?
當我在一個大結構上得到Uncaught TypeError: Converting circular structure to JSON
時,很難找出圓形參考的確切位置。如何在JSON.stringify中找到循環結構:未捕獲的TypeError:將循環結構轉換爲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()'對象,然後在瀏覽器控制檯中交互式地瀏覽。 – Pointy