前端日常踩坑之路

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

上一篇 下一篇

猜你喜欢

热点阅读