如何解决使用JSON.stringify时遇到的循环引用问题
2023-09-14 09:03:56 时间
程序员在日常做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的原创文章,尽在:“汪子熙”:
相关文章
- linux系统-tcpdump常用抓包命令_tcpdump循环抓包
- es6模板字符串_js循环字符串
- matlab——for循环「建议收藏」
- curl调用单笔接口结合shell循环实现批量操作
- json字符串转换为Json对象_前端字符串转json
- C语言之循环结构 for(一)详解编程语言
- MySQL生成JSON:一种实现方式(mysql生成json)
- java中continue配合标签进行继续循环详解编程语言
- 把JSON 格式数据存入MySQL(mysql存入json)
- 从JSON中读取数据存入MySQL数据库(json存入mysql)
- 使用PHP轻松循环MySQL,让数据处理变得更容易(php循环mysql)
- 如何在MySQL中实现JSON缩进(mysql中json缩进)
- Oracle对于JSON的研究揭开未知的问号(json问号oracle)
- 精简操作以JSON方式修改Oracle数据库中的数据(json修改oracle)
- Oracle 数据库如何利用JSON格式保存信息(json oracle)
- Oracle中利用循环实现任务的完美格式(oracle中循环的格式)
- 强大的Redis存储JSON的功能(redis里面存json)
- c#循环中产生伪随机数
- json数据的列循环示例
- javascript闭包传参和事件的循环绑定示例探讨
- JS循环遍历JSON数据的方法
- 用循环或if语句从json中取数据示例