使用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

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

孰是孰非

一家之言

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

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

以上是关于使用JSON.parse字符串转换json报错解决办法的主要内容,如果未能解决你的问题,请参考以下文章

js解析json字符串报错解决方案(带有转义字符的json字符串)

JSON.parse解析特殊字符报错的解决办法

fastjson 返回json字符串,JSON.parse 报错

请教jsonJSON.parse中双引号如何解决

Unexpected token o in JSON at position 1 报错原因

parse.JSON()报错是什么原因?