JSON.stringify 日常踩坑
2019-08-09 本文已影响0人
言蹊灬
工作上遇到了 需要将接口返回的json数据存入localStorage中,但是在用JSON.stringify格式化数据时 出现了如下错误
VM211:1 Uncaught TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at <anonymous>:1:6
在网上查找之后 发现是对返回数据进行处理时 发生了循环引用
解决办法如下:
// 解决循环引用导致的JSON序列化失败的问题
let cache =[];
let str = JSON.stringify(info, function(key, value) {
if (typeof value ==='object' && value !==null) {
if (cache.indexOf(value) !== -1) {
// 移除
return;
}
// 收集所有的值
cache.push(value);
}
return value;
})
cache =null;
localStorage.setItem('info', str)
解决思路就是通过自定义stringify方法,设置一个全局缓存变量,stringify的第二个参数如果是function时,他会传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""
补充更新:npm-flatted 也能解决这个问题
https://www.npmjs.com/package/flatted