如何解決使用JSON.stringify時遇到的迴圈引用問題
程式設計師在日常做TypeScript/JavaScript開發時,經常需要將複雜的JavaScript物件通過JSON.stringify序列化成json字串,儲存到本地以便後續具體分析。
然而如果JavaScript物件本身包含迴圈引用,則JSON.stringify不能正常工作,錯誤訊息:
VM415:1 Uncaught TypeError: Converting circular structure to JSON
解決方案,使用下面這段來自這個 網站的程式碼,定義一個全域性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物件序列化成字串了。
更多Jerry的原創文章,盡在:"汪子熙":
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2758166/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spring如何解決迴圈引用Spring
- require()迴圈引用問題UI
- 怎麼解決引用計數 GC 的迴圈引用問題?GC
- FastJson中迴圈引用的問題ASTJSON
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- python 寫 po 模式時遇到的迴圈匯入問題Python模式
- JavaScript 深複製的迴圈引用問題JavaScript
- 在迴圈陣列時使用splice()方法刪除陣列遇到的問題陣列
- 解決迴圈引用
- 狀態模式中迴圈呼叫子元件時遇到的問題模式元件
- 1_使用swiper陣列物件迴圈圖片遇到的問題陣列物件
- ARC下的block導致的迴圈引用問題解析BloC
- 記錄遇到的一個迴圈依賴問題
- Unity容器建構函式引數迴圈引用問題及解決Unity函式
- 迴圈引用
- 透過迴圈引用問題來分析Spring原始碼Spring原始碼
- 使用nodeAPI時遇到非同步問題的解決方法API非同步
- SpringBoot 迴圈引用解決辦法Spring Boot
- 使用c#強大的表示式樹實現物件的深克隆之解決迴圈引用的問題C#物件
- Block迴圈引用的三種解決方式BloC
- NSTimer迴圈引用的幾種解決方案
- Python迴圈引用是什麼?如何避免迴圈引用?Python
- iOS迴圈引用iOS
- 迴圈內臨時變數問題變數
- 關於一個迴圈請求與迴圈計時器的問題
- iOS | 用於解決迴圈引用的block timeriOSBloC
- Linux while 迴圈中使用ssh問題LinuxWhile
- Flask中的迴圈引用/匯入問題演示以及解決方案 | 藍圖的使用與解析 | 藍圖額外用法Flask
- Spring如何解決迴圈依賴?Spring
- spring是如何解決迴圈依賴的?Spring
- Spring是如何解決迴圈依賴的Spring
- 企業在使用點晴OA系統遇到操作問題如何解決?
- Ubuntu16.04使用者登入介面死迴圈問題的解決Ubuntu
- Spring中如何解決迴圈依賴Spring
- Swift - 使用 Protocol 避免框架之間迴圈引用SwiftProtocol框架
- 如何解決input遇到fixed,absolute佈局出現的問題
- spring: 我是如何解決迴圈依賴的?Spring
- iOS 關於NSTimer的迴圈引用iOS