使用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报错解决办法相关推荐
- npm 安装yeoman时出现npm WARN deprecated npmconf@2.1.2报错...解决办法
npm 安装yeoman时出现npm WARN deprecated npmconf@2.1.2报错-解决办法 我是nodeJS 小白,在用npm命令安装yeoman是,给出了这样的错误提示: $ n ...
- 连接远程服务器CredSSP加密Oracle修正报错解决办法
连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 "regedit"(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)\S ...
- please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法
php安装扩展mysqli的实现步骤及报错解决办法 terminal#cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./c ...
- Could not resolve host: 'localhost 报错解决办法
Could not resolve host: 'localhost 报错解决办法 面向Windows的: 零基础的我一直卡在这一步骤下: 首先要先在Windows安装curl:安装方式参考:http ...
- php mysqli报错,php安装扩展mysqli的实现步骤及报错解决办法
php安装扩展mysqli的实现步骤及报错解决办法 terminal #cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./ ...
- 浏览器DNS_PROBE_FINISHED_NXDOMAIN报错解决办法
方法1: 更改DNS地址 114.114.114.114 Preferred DNS Server: 8.8.8.8 Alternate DNS Server: 8.8.4.4 方法2: 浏览器浏览网 ...
- vmware虚拟机删除光驱启动报错解决办法
vmware虚拟机删除光驱启动报错解决办法 将vmware虚拟机光驱给删除了,启动就一直报这个错,具体如下: IDE 设备(磁盘/CD-ROM)配置不正确."ide1:1"上具有一 ...
- LaTeX报错解决办法:arithmetic: number too big ! Dimension too large.
LaTeX报错解决办法:arithmetic: number too big ! Dimension too large. 试了一些网上搜到的办法: 用画图软件.PS之类的修改另存jpg或者png: ...
- 【matlab】【Datcom】气动解算软件win10报错解决办法及运行交互示例
版本说明 免费版本仍然可用.尚未使用Datcom + Pro版本的功能进行更新.没有大量的工作,我无法生成新的分发程序包,并且我现在对此不感兴趣.建议您观看教程视频,以了解使用新的Datcom + P ...
- M1 pod install CocoaPod 报错解决办法
Mac M1 pod install 报错解决办法 Mac M1 CocoaPods 环境问题 M1 Ruby 环境问题 新到的 MacBook Pro M1,配置如下: MacBook Pro (1 ...
最新文章
- Gut:粪便病毒组移植减轻2型糖尿病和肥胖症模型小鼠的相关症状
- 面试官眼中的计算机水平,面试官最不喜欢的五句话,千万别说了
- 最详细的CISCO路由器配置命令及方法
- 一些关于机器学习的网站总结
- 分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!
- Kickstart+NFS+DHCP+TFTP+PXElinux实现CentOS的网络自动安装
- Linux虚拟文件系统(VFS)
- Java学习笔记2、环境变量配置与初学者常见错误
- NGINX SSL配置之设置HTTPS服务器
- 反射 数据类型_这是一份超全面详细的Java反射机制学习指南
- No boot device avalible,Press any key to reboot the system
- const 与 readonle 的异同
- masm32v12编译器自带库masm32.lib在nasm中的使用。
- 比较两个文本差异,直接显示两个文本的相同点与不同点
- 淘宝店铺装修图片常用尺寸有哪些?淘宝图片大小要求
- 图片外链方法大全: 免费的图床! 告别新浪图床 和 CDN
- 2022年最全软件测试面试题加答案,毫不夸张的说,学完面试涨薪5K
- Pycharm 更换皮肤和壁纸
- 计算机与英语关系,计算机底层和英文毫无关系
- JAVA集合之Map集合遍历
热门文章
- JS-- jQuery遮罩插件 jquery.blockUI.js
- 几种流行Webservice框架性能对比 .
- FileUpload1上传控件
- 如何用java调用python的爬虫程序
- 联想微型计算机v1.0,联想Energy Management
- ubuntu硬盘序列号怎么查询_Ubuntu16.04中查看硬盘的型号和读取速度
- 北京极通EWebs与服务器蓝屏死机
- 约翰·冯·诺依曼的开挂人生
- python实现基于selenium的天猫淘宝秒杀,支持定金商品,自动付款
- linux fedora14 u盘运行,通过U盘安装Fedora-14-i686-Live-Desktop