JSON.stringify 日常踩坑

工作上遇到了 需要将接口返回的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   曾经有一段时间,XML 是互联网上传输数据化结构的事实标准。Web 服务的第一次浪潮很大程度上都是建立在 XM...
    霜天晓阅读 417评论 0 1
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,874评论 0 3
  • 引言 曾经有一段时间,XML是互联网上传输结构化数据的事实标准。Web服务的第一次浪潮很大程度上都是建立在XML之...
    DHFE阅读 715评论 0 0
  • $ 什么是JSON ?   JSON: JS 对象表示法,它是一种数据格式,不是一种编程语言。JSON不支持变量,...
    果汁凉茶丶阅读 1,263评论 1 3
  • 一、什么是localStorage? 在HTML5中,新加入了一个localStorage特性,这个特性主要是用来...
    persistlu阅读 674评论 0 3

友情链接更多精彩内容