记录生活之JSON.parse坑 -- 【JavaScript】

目录

起因

问题

解决

因为是太简单的问题了,无法百度。(他们只会告诉你key取值取错了或者的确是没有对应的value值)

[js中的对象是只能用string || symbol类型来定义,所以objitem.label没有问题](#js中的对象是只能用string || symbol类型来定义,所以obj[item.label]没有问题)

那么问题出现哪里呢???

小分享


今天在处理数据的时候碰到一个很简单又很复杂的问题。因为之前没有关注过,这次碰到了就解决了挺长的时间,大家见笑了~~

起因

事情的起因就是日常开发工作,然后需要处理一个数据,server端给到的数据是看起来"第一眼很像"json string的数据,所以我就想也没想,直接parse吧。

问题

相同的key名,但是获取不到value值。真的是一个很简单又很复杂的问题!!!

解决

因为是太简单的问题了,无法百度。(他们只会告诉你key取值取错了或者的确是没有对应的value值)
js中的对象是只能用string || symbol类型来定义,所以objitem.label没有问题
那么问题出现哪里呢???

我发现问题的思路是这样的,给小伙伴们分享一下

首先我把步骤一步步的分解开,原先类似是这样的一长串

javascript 复制代码
JSON.parse(要解析的json string 数据)[item.label]

于是变成

javascript 复制代码
let parseRes = JSON.parse(要解析的json string 数据);
javascript 复制代码
let parseRes = JSON.parse('要处理的数据');
for (const key in parseRes) {
   debugger;
   if (key === item.label) {
      console.log('相等');
   }
}

然后就让我看到了问题的关键
这个key值竟然有反斜杠"\"

然后就去查对应JSON.parse的问题了,百度大佬给的我第一个解决方案try...catch...
很好的容错方式,但并没用

说明JSON.parse是支持反斜杠转成json对象的

那么再看数据,我发现server端给的数据的key值就是带有反斜杠的,而value值没有(这里涉及数据我就不粘帖出来了)。而且涉及的规律就是可以通过.replace(/\\"/g, '')正则先处理掉的

**最后得出的结论就是先通过replace将反斜杠去除,然后再JSON.parse转换。**听到这个结果是不是感觉又是白忙活的一样,其实问题不在于大小,而是在于怎么面对,怎么处理,不积跬步无以至千里。在处理问题的过程中大神们也都是一步步找到问题的关键然后再"冒泡"似的一步步往上查找,希望大家也能找到自己的问题解决方案成为未来的大神💪🏻

希望对你们有帮助!


小分享

差点忘记和大家分享一个要点,那也是这次在问题中发现的小技巧

testObj是我创建的正常对象,而下面的parseRes是带反斜杠解析后的对象。

是不是发现在控制台打印下,正常的key值是不会出现双引号 || 单引号的,而不正常的情况就是会有双引号。因为是很小的点,在前面我打印排查问题的时候也没看出来,所以就没想到这点。走了不少弯路,然后控制台也不会帮我们把反斜杠打印出来,着实是有点坑啊!

今天的分享就到这里,如果觉得有收获,麻烦给个赞和关注。你的鼓励是我写作的动力,大家一起学习一起进步。

相关推荐
To_OC6 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
To_OC6 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
vipbic6 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy6 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志7 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble8 小时前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长8 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯9 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜9 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司10 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能