如何解決使用JSON.stringify時遇到的迴圈引用問題

i042416發表於2021-02-21

程式設計師在日常做TypeScript/JavaScript開發時,經常需要將複雜的JavaScript物件通過JSON.stringify序列化成json字串,儲存到本地以便後續具體分析。


如何解決使用JSON.stringify時遇到的迴圈引用問題


然而如果JavaScript物件本身包含迴圈引用,則JSON.stringify不能正常工作,錯誤訊息:

VM415:1 Uncaught TypeError: Converting circular structure to JSON


如何解決使用JSON.stringify時遇到的迴圈引用問題


解決方案,使用下面這段來自這個 網站的程式碼,定義一個全域性cache陣列,每當待序列化的JavaScript物件的屬性被遍歷時,將該屬性對應的值儲存到cache陣列去。

如果遍歷時發現,有屬性值已經在cache陣列裡有值了,說明檢測到了迴圈引用,此時直接return退出迴圈即可。

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; // 清空變數,便於垃圾回收機制回收

使用這種辦法,我成功將一個存在迴圈引用的JavaScript物件序列化成字串了。


如何解決使用JSON.stringify時遇到的迴圈引用問題


更多Jerry的原創文章,盡在:"汪子熙":

如何解決使用JSON.stringify時遇到的迴圈引用問題


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2758166/,如需轉載,請註明出處,否則將追究法律責任。

相關文章