程序员在日常做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的原创文章,尽在:“汪子熙”:

如何解决使用JSON.stringify时遇到的循环引用问题相关推荐

  1. 序列化类型为XX的对象时检测到循环引用

    现象描述: MVC4中将dataTable转换成Json时,总是提示错误:"序列化类型为"System.Reflection.RuntimeModule"的对象时检测到循 ...

  2. 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用

    学习 EF Code First+MVC 时遇到了在请求JsonResult时出现 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用 的异常,原因 ...

  3. 接口测试--apipost解决传递json参数时字符串包含有@和/的问题

    使用apipost进行接口测试的时候,传递json参数的时候字符穿中包含有@和/的时候就无法进行正常的访问. 是因apipost支持json参数使用内置mock字段,解决办法是在设置里面,把自动识别请 ...

  4. 【Vue】解决 Vue 视图不刷新和组件循环引用不加载问题

    1.视图不刷新:强制更新视图 场景: 1.当你的一个input绑定的值,是data中开始不存在的,后来新添加的情况,可能你就需要用到这个强制更新了: 2.也可能是项目遗留问题,你来进行修复,不想大动干 ...

  5. json.stringify()详解

    JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组 ...

  6. JSON.parse和JSON.stringify

    前言 JSON(JavaScript Object Notation)是一种语法,可用来序列化对象.数组.数值.字符串.布尔值和 null .它基于 JavaScript 语法,但与之不同:JavaS ...

  7. JSON.stringify()深入了解

    文章目录 语法 参数 返回值 异常 描述 示例 replacer参数 space 参数 toJSON 方法 JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON ...

  8. java json循环引用_填坑,解决json对象循环引用,在复杂案例中的应用

    // 这是Kotlin代码,Java也是一样原理,都是用@JsonView实现单向透明.// 原理:使用@JsonView和withView(JvXxx) 让jackson从某一方向扫描时,直接忽略某 ...

  9. block为什么用copy以及如何解决循环引用

    在完成项目期间,不可避免的会使用到block,因为block有着比delegate和notification可读性更高,而且看起来代码也会很简洁.于是在目前的项目中大量的使用block. 之前给大家介 ...

最新文章

  1. Your First Concordion.Net Project (Part 5)-Running Specs with Gallio
  2. bitcoin转账api,python3.7
  3. 成熟的GAN会自己分析脸部纹理!英伟达StyleGAN团队出新作,网友:竟然还能有突破...
  4. 在Linux下编写运行你的第一条代码——Hello Linux
  5. linux——回射服务器
  6. git工作区和暂存区(4)
  7. 《华为交换机学习指南》学习笔记·一
  8. 钩子(HOOK)函数教程
  9. dell t640 添加硬盘_Dell EMC PowerEdge T640详解
  10. ESP8266串口透传+WiFi储存+OTA+smartconfig/airkiss
  11. 如何删除电脑上一些恶意安装软件?
  12. 深耕“有效私域”,雀巢集团携手腾讯重塑零售数字化体验
  13. 上学歌计算机音乐数字乐谱,儿童歌曲上学歌简谱
  14. vue 跳转页面删除当前tab
  15. hive建表与mysql建表的区别
  16. 【C++】9.GIS应用:开源GIS平台开发入门(MapServer+QGIS+PostGIS+OpenLayers)
  17. PXE 网络安装 windows 或 linux
  18. 网易云信联手配音秀,打造语音聊天室互动新体验
  19. [阿发你好]C/C++学习指南
  20. 一篇文章了解_docker

热门文章

  1. Android性能调优利器StrictMode
  2. 前端,我为什么不要你(转)
  3. 《从零开始学Swift》学习笔记(Day 20)——函数中参数的传递引用
  4. 第四-generation音频:互联网智能声音会火
  5. NodeJs Express 4.x 入门
  6. 如何遍历当前进程中的AppDomain
  7. va_start、va_end、va_list的使用
  8. 矩阵对抗与漏洞补丁201001(第4期)
  9. P1387 最大正方形
  10. Luogu P3953 逛公园