解决办法

问题点

字符串格式不是很完美,导致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还是有些区别的。

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

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

  1. npm 安装yeoman时出现npm WARN deprecated npmconf@2.1.2报错...解决办法

    npm 安装yeoman时出现npm WARN deprecated npmconf@2.1.2报错-解决办法 我是nodeJS 小白,在用npm命令安装yeoman是,给出了这样的错误提示: $ n ...

  2. 连接远程服务器CredSSP加密Oracle修正报错解决办法

    连接远程服务器CredSSP加密Oracle修正报错解决办法: 打开注册表,快捷输入 "regedit"(类似找命令提示符 输入 cmd 一样)找文件夹 路径:HKLM(缩写)\S ...

  3. please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法

    php安装扩展mysqli的实现步骤及报错解决办法 terminal#cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./c ...

  4. Could not resolve host: 'localhost 报错解决办法

    Could not resolve host: 'localhost 报错解决办法 面向Windows的: 零基础的我一直卡在这一步骤下: 首先要先在Windows安装curl:安装方式参考:http ...

  5. php mysqli报错,php安装扩展mysqli的实现步骤及报错解决办法

    php安装扩展mysqli的实现步骤及报错解决办法 terminal #cd php-5.3.6/ext/mysqli #/usr/local/webserver/php/bin/phpize #./ ...

  6. 浏览器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: 浏览器浏览网 ...

  7. vmware虚拟机删除光驱启动报错解决办法

    vmware虚拟机删除光驱启动报错解决办法 将vmware虚拟机光驱给删除了,启动就一直报这个错,具体如下: IDE 设备(磁盘/CD-ROM)配置不正确."ide1:1"上具有一 ...

  8. LaTeX报错解决办法:arithmetic: number too big ! Dimension too large.

    LaTeX报错解决办法:arithmetic: number too big ! Dimension too large. 试了一些网上搜到的办法: 用画图软件.PS之类的修改另存jpg或者png: ...

  9. 【matlab】【Datcom】气动解算软件win10报错解决办法及运行交互示例

    版本说明 免费版本仍然可用.尚未使用Datcom + Pro版本的功能进行更新.没有大量的工作,我无法生成新的分发程序包,并且我现在对此不感兴趣.建议您观看教程视频,以了解使用新的Datcom + P ...

  10. M1 pod install CocoaPod 报错解决办法

    Mac M1 pod install 报错解决办法 Mac M1 CocoaPods 环境问题 M1 Ruby 环境问题 新到的 MacBook Pro M1,配置如下: MacBook Pro (1 ...

最新文章

  1. Gut:粪便病毒组移植减轻2型糖尿病和肥胖症模型小鼠的相关症状
  2. 面试官眼中的计算机水平,面试官最不喜欢的五句话,千万别说了
  3. 最详细的CISCO路由器配置命令及方法
  4. 一些关于机器学习的网站总结
  5. 分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!
  6. Kickstart+NFS+DHCP+TFTP+PXElinux实现CentOS的网络自动安装
  7. Linux虚拟文件系统(VFS)
  8. Java学习笔记2、环境变量配置与初学者常见错误
  9. NGINX SSL配置之设置HTTPS服务器
  10. 反射 数据类型_这是一份超全面详细的Java反射机制学习指南
  11. No boot device avalible,Press any key to reboot the system
  12. const 与 readonle 的异同
  13. masm32v12编译器自带库masm32.lib在nasm中的使用。
  14. 比较两个文本差异,直接显示两个文本的相同点与不同点
  15. 淘宝店铺装修图片常用尺寸有哪些?淘宝图片大小要求
  16. 图片外链方法大全: 免费的图床! 告别新浪图床 和 CDN
  17. 2022年最全软件测试面试题加答案,毫不夸张的说,学完面试涨薪5K
  18. Pycharm 更换皮肤和壁纸
  19. 计算机与英语关系,计算机底层和英文毫无关系
  20. JAVA集合之Map集合遍历

热门文章

  1. JS-- jQuery遮罩插件 jquery.blockUI.js
  2. 几种流行Webservice框架性能对比 .
  3. FileUpload1上传控件
  4. 如何用java调用python的爬虫程序
  5. 联想微型计算机v1.0,联想Energy Management
  6. ubuntu硬盘序列号怎么查询_Ubuntu16.04中查看硬盘的型号和读取速度
  7. 北京极通EWebs与服务器蓝屏死机
  8. 约翰·冯·诺依曼的开挂人生
  9. python实现基于selenium的天猫淘宝秒杀,支持定金商品,自动付款
  10. linux fedora14 u盘运行,通过U盘安装Fedora-14-i686-Live-Desktop