JS报错 Unexpected token u in JSON at position 1,那些年,JSON.parse()带给我们的坑

玩过js的都用过JSON.parse方法来将json字符串转换为动态的json对象,但是这里面却埋了很大的严格格式的坑

首先我们来看看js中转换对象的方法有哪些,js是一种动态对象语言,所以可想而知,对象的创建和赋值就会很随意很任性,因此方法肯定不止一种,一般来说有下面三种:

1、var json = JSON.parse(str);
2、var json = eval(“(” + str + “)”);
3、var json = (new Function("return " + str))();

明显,第一种是最直观也是最方便使用的,但是第一种就真的好用吗?举个栗子先:

var str = "{'name':'大明','age':3}";

上面这段try-catch运行发现,诶,控制台报错了,
JS报错 Unexpected token u in JSON at position 1,那些年,JSON.parse()带给我们的坑
查阅资料发现原来这个parse方法要严格遵循JSON规范,也就是属性名name和age必须加双引号,还有就是,整个json字符串不能用双引号包含单引号,要把单引号放在外面,双引号用来包裹内部,如下:

str = '{"name":"小明","age":18}'; 

这样控制台就可以输出正确的对象了。

但是有时候,我们开发前端,可能数据不太尽如人意,但是如果我们每次都批量处理数据再用parse可就太繁琐了,所以推荐使用方法2、3:
2、var json = eval("(" + str + ")");
3、var json = (new Function("return " + str))();
这两个方法只替换str就行,其他部分是结构化的内容直接填写就行。这样遇到类似上面不是太规范的JSON数据的时候,也不用头大了。

如果解决了你遇到的问题,感谢你的肯定支持。如果没有解决到你的问题,那深表遗憾,浪费了你的宝贵时间。

主要做自己记录备忘。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值