使用JSON.parse字符串转换json报错解决办法
Posted 沛沛老爹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSON.parse字符串转换json报错解决办法相关的知识,希望对你有一定的参考价值。
解决办法
问题点
字符串格式不是很完美,导致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对象。
就是这两个简单的方法,中间用的时候出现了一些问题。
曾经的自以为是
无效的代码
先上下代码
let sence = 'id:1,name:张三'
let obj = JSON.parse(""+sence +"")
this.id = obj.id
结果很打脸
理想很丰满,现实很骨感。
直接报错了。
针对报错的最常规手法就是debugger、console.log()了。
发现使用JSON.stringify()输出数据很正常。
一转换json对象就可以报异常了。
人民的大救星
百度,百度,找到一条出路
这就很纠结了,百度吧,百度吧,百度吧
网上说是因为格式不严谨,所以就报异常了。
JOSN.parse对格式要求非常严格。
那怎么办呢?
对于这种后台传递过来的没有引号的
大部分都推荐使用eval()或者$.parseJSON方法转换为json对象。
let sence = 'id:1,name:张三'
let obj = ( Function( "return " + sence ) )()
console.log(JSON.stringify(obj))
this.id = obj.id
结果完美转换。引号都给加上了。
孰是孰非
一家之言
$.parseJSON、JSON.parse和eval还是有些区别的。
类型 | $parseJSON | JSON.parse | eval |
方法说明 | jquery的方法。将符合标准格式的的JSON字符串转为与之对应的javascript对象 | 只能解析属性名是双引号包裹的字符串对象 | 可将一个JavaScript代码字符串求值成特定的对象 |
主要区别 | 字符串必须用双引号括起来。 | 必须严格遵守json字符串格式;属性名称必须用双引号包裹; 字符串必须用双引号括起来。 | 字符串必须用双引号括起来。 |
使用场景 | 能用JSON.parse的都可以用这个 | json字符串必须严格符合json格式。可以用在后端传递给前端数据格式的使用使用。对数据的严谨性可以 | 格式不规范的时候,当你不能确认对方的数据格式是不是很严谨的时候 |
推荐程度 | 推荐 | 一般 | 不推荐 |
以上是关于使用JSON.parse字符串转换json报错解决办法的主要内容,如果未能解决你的问题,请参考以下文章
js解析json字符串报错解决方案(带有转义字符的json字符串)
fastjson 返回json字符串,JSON.parse 报错