如何解决使用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的原创文章,尽在:“汪子熙”:
如何解决使用JSON.stringify时遇到的循环引用问题相关推荐
- 序列化类型为XX的对象时检测到循环引用
现象描述: MVC4中将dataTable转换成Json时,总是提示错误:"序列化类型为"System.Reflection.RuntimeModule"的对象时检测到循 ...
- 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用
学习 EF Code First+MVC 时遇到了在请求JsonResult时出现 序列化类型 System.Data.Entity.DynamicProxies 的对象时检测到循环引用 的异常,原因 ...
- 接口测试--apipost解决传递json参数时字符串包含有@和/的问题
使用apipost进行接口测试的时候,传递json参数的时候字符穿中包含有@和/的时候就无法进行正常的访问. 是因apipost支持json参数使用内置mock字段,解决办法是在设置里面,把自动识别请 ...
- 【Vue】解决 Vue 视图不刷新和组件循环引用不加载问题
1.视图不刷新:强制更新视图 场景: 1.当你的一个input绑定的值,是data中开始不存在的,后来新添加的情况,可能你就需要用到这个强制更新了: 2.也可能是项目遗留问题,你来进行修复,不想大动干 ...
- json.stringify()详解
JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组 ...
- JSON.parse和JSON.stringify
前言 JSON(JavaScript Object Notation)是一种语法,可用来序列化对象.数组.数值.字符串.布尔值和 null .它基于 JavaScript 语法,但与之不同:JavaS ...
- JSON.stringify()深入了解
文章目录 语法 参数 返回值 异常 描述 示例 replacer参数 space 参数 toJSON 方法 JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON ...
- java json循环引用_填坑,解决json对象循环引用,在复杂案例中的应用
// 这是Kotlin代码,Java也是一样原理,都是用@JsonView实现单向透明.// 原理:使用@JsonView和withView(JvXxx) 让jackson从某一方向扫描时,直接忽略某 ...
- block为什么用copy以及如何解决循环引用
在完成项目期间,不可避免的会使用到block,因为block有着比delegate和notification可读性更高,而且看起来代码也会很简洁.于是在目前的项目中大量的使用block. 之前给大家介 ...
最新文章
- Your First Concordion.Net Project (Part 5)-Running Specs with Gallio
- bitcoin转账api,python3.7
- 成熟的GAN会自己分析脸部纹理!英伟达StyleGAN团队出新作,网友:竟然还能有突破...
- 在Linux下编写运行你的第一条代码——Hello Linux
- linux——回射服务器
- git工作区和暂存区(4)
- 《华为交换机学习指南》学习笔记·一
- 钩子(HOOK)函数教程
- dell t640 添加硬盘_Dell EMC PowerEdge T640详解
- ESP8266串口透传+WiFi储存+OTA+smartconfig/airkiss
- 如何删除电脑上一些恶意安装软件?
- 深耕“有效私域”,雀巢集团携手腾讯重塑零售数字化体验
- 上学歌计算机音乐数字乐谱,儿童歌曲上学歌简谱
- vue 跳转页面删除当前tab
- hive建表与mysql建表的区别
- 【C++】9.GIS应用:开源GIS平台开发入门(MapServer+QGIS+PostGIS+OpenLayers)
- PXE 网络安装 windows 或 linux
- 网易云信联手配音秀,打造语音聊天室互动新体验
- [阿发你好]C/C++学习指南
- 一篇文章了解_docker