JSON.stringify出現 Converting circular structure to JSON


JSON.stringify大家已經不陌生了,是一個將json對象轉換為字符串的方法。但是如果你在瀏覽器控制台中輸出 JSON.stringify(window). 如果期望輸出一段文字, 可能會失望了. 事實上, 會輸出結果如下:

VM211:1 Uncaught TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at <anonymous>:1:6

上面的錯誤信息告訴我們, 對象中存在循環引用. 解決思路就是通過自定義stringify方法,設置一個全局緩存變量,stringify的第二個參數如果是function時,他會傳入每個成員的鍵和值。使用返回值而不是原始值。如果此函數返回 undefined,則排除成員。根對象的鍵是一個空字符串:""。所以,便有了如下解決方案:

var o = {};
o.o = o;

// 聲明cache變量,便於匹配是否有循環引用的情況
var cache = [];
var str = JSON.stringify(o, function(key, value) {
    if (typeof value === 'object' && value !== null) {
        if (cache.indexOf(value) !== -1) {
            // 移除
            return;
        }
        // 收集所有的值
        cache.push(value);
    }
    return value;
});
cache = null; // 清空變量,便於垃圾回收機制回收

如上即可解決json字符串化循環引用的問題。

站在巨人的肩膀上摘蘋果:

https://www.oecom.cn/json-stringify-error/

https://stackoverflow.com/questions/11616630/how-can-i-print-a-circular-structure-in-a-json-like-format


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM