JSON.parse报错 不能序列化成功的原因之一

报错

最近开发一个项目,需要后台返回一个字符串对象数组(json格式的属性值),结果我将请求回来的数据JSON.parse(objStr)序列化后报错了,后来发现是后台返回的属性值字符串,带有换行和空格,让后台去掉换行符和空格就不报错了。。。

最近开发一个项目,需要后台返回一个二维码,所以后台返回给我一串base64格式的字符串。本以为直接img标签渲染即可,但死活不出来,以为我的方法有问题,一直在查找。后来发现是后台返回的base64图片格式的字符串 带有换行和空格,写了一个方法去掉换行和空格,图片立马渲染成功(吐槽一下。。)

其他案例

如果 JSON.parse(JSON.stringify(config)) 报错,通常是因为被拷贝的对象包含了无法被 JSON 序列化的数据类型,比如函数或循环引用。

函数和循环引用是无法通过 JSON 序列化的,因为 JSON 格式只支持基本数据类型和简单的数据结构(如对象和数组),无法表示函数和循环引用。

解决该问题的一种方法是使用深拷贝的递归方法,如上述第一种方法。下面是一个基于递归的深拷贝函数的示例代码:

function deepCopy(obj, visited = new WeakMap()) {
  // 非对象或null直接返回
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  
  // 处理循环引用
  if (visited.has(obj)) {
    return visited.get(obj);
  }
  
  let copy = Array.isArray(obj) ? [] : {};
  visited.set(obj, copy);
  
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key], visited);
    }
  }
  
  return copy;
}

请注意,即使使用递归方法,如果要深拷贝的对象中仍存在函数或循环引用,仍然可能导致问题。在深拷贝对象时,请确保要拷贝的对象不包含这些特殊情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hzxOnlineOk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值