使用JSON.parse字符串转换json报错解决办法

谁借莪1个温暖的怀抱¢ 2022-09-15 15:48 504阅读 0赞

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBA5rKb5rKb6ICB54i5_size_20_color_FFFFFF_t_70_g_se_x_16

解决办法

问题点

字符串格式不是很完美,导致JSON.parse转换失败。JSON.parse()方法对字符串的格式要求极其严格。一点格式错误都不能有,否则就报异常。

解决方案

要么改掉你的json字符串,要么使用$parseJSON或者eval的方式生成json对象。

问题产生的背景

获取post的值

在获取小程序的二维码返回参数的时候。

为了保证数据的安全性,走了POST的请求方式。

POST的数据提交返回后,经过了decodeURIComponent转换之后。变成了类似JSON串的方式呈现。

例如id:101,pid:102

这种格式一看到就想往json转。

毕竟json还是很方便的。

用json的话,很方便就考虑到嵌入的JSON。

JSON

JSON就两个常用方法

JSON.stringify()

JSON.parse()

一个是json对象转字符串,一个是字符串转json对象。

就是这两个简单的方法,中间用的时候出现了一些问题。

曾经的自以为是

无效的代码

先上下代码

  1. let sence = 'id:1,name:张三'
  2. let obj = JSON.parse("{"+sence +"}")
  3. this.id = obj.id

结果很打脸

理想很丰满,现实很骨感。

直接报错了。

针对报错的最常规手法就是debugger、console.log()了。

发现使用JSON.stringify()输出数据很正常。

一转换json对象就可以报异常了。

人民的大救星

百度,百度,找到一条出路

这就很纠结了,百度吧,百度吧,百度吧

网上说是因为格式不严谨,所以就报异常了。

JOSN.parse对格式要求非常严格。

那怎么办呢?

对于这种后台传递过来的没有引号的

大部分都推荐使用eval()或者$.parseJSON方法转换为json对象。

  1. let sence = 'id:1,name:张三'
  2. let obj = ( Function( "return " + sence ) )()
  3. console.log(JSON.stringify(obj))
  4. this.id = obj.id

结果完美转换。引号都给加上了。

孰是孰非

一家之言

$.parseJSONJSON.parse和eval还是有些区别的。


































类型 $parseJSON JSON.parse eval
方法说明 jquery的方法。将符合标准格式的的JSON字符串转为与之对应的JavaScript对象 只能解析属性名是双引号包裹的字符串对象 可将一个JavaScript代码字符串求值成特定的对象
主要区别 字符串必须用双引号括起来。 必须严格遵守json字符串格式;属性名称必须用双引号包裹;
字符串必须用双引号括起来。
字符串必须用双引号括起来。
使用场景 能用JSON.parse的都可以用这个 json字符串必须严格符合json格式。可以用在后端传递给前端数据格式的使用使用。对数据的严谨性可以 格式不规范的时候,当你不能确认对方的数据格式是不是很严谨的时候
推荐程度 推荐 一般 不推荐

发表评论

表情:
评论列表 (有 0 条评论,504人围观)

还没有评论,来说两句吧...

相关阅读

    相关 vue及其解决办法

    导语: 初学者在学习vue的时候,特别是刚开始使用vue-cli的时候,在开发过程中经常会出现很多的报错,因此感觉人生不值得,今天一篇文章,帮你搞定所有报错,人生是值得的!!