对JSON.parse()中存在转义字符问题的解决

简介:

 在实际项目中我们需要将一些数据将以字符串的形式存储到数据库中,比如:

'{ "name":"张三 ", "gender":"这是个对象,里面有test}';

等需要调用时,使用 JSON.parse()再转换回需要的数据格式,但是今天我调用使用JSON.parse()转换时这里报了错误

"SyntaxError: Bad control character in string literal in JSON at position 579 

问题分析:

第一反应就是字符串出了问题但是去数据库中查看了下字符串,并且把字符串copy出来,自己写了个demo转换了下,发现并没问题竟然能够转换成功。

这就比较郁闷了,然后我去网上搜了类似的问题大概就是   字符串中含有含有不可转义字符     然后我突然想到会不会是 在界面输入字符串的时候敲了个回车的原因。毕竟回车在字符串转义的时候会变成   ---   \n   ---  ,然后我就立刻写了个demo试验了下  还真是

然后知道问题所在之后就简单了:    

this.form = JSON.parse(str.replace('\n', '\\n'))

 

知识点疑问和总结:

 我记得学c的时候 转义字符明明是   \  为什么这里 却用 \\作为转义符?

原来JSON.parse的参数包含转移字符的时候会遇到两次转义,其实第一次是字符串本身的转义,第二次是将真正转为js对象的转义。

举个例子:

let str ='{ "name":"张三 ", "gender":"这是个对象,里面有\\"test\\"}';

 第一次转义字符串自身转义为:

'{ "name":"张三 ", "gender":"这是个对象,里面有\"test\"}'

第二次真正对应字符串转对象时的转义:

同样的其他特殊字符:

1.\n,如想想出现正确的换行需要json字符串中是\\n,其实是先对\n中的\转义,n变成了普通字符,在解析为js对象的时候n与之前的\(只有一个\了)被解释为换行。如下的两个与此类似。
2.\r,\\r
3.\t,\\t

转义字符\r、\n、以及\r\n的区别:

\r :将当前位置移到本行开头。又叫回车
\n:将当前位置移到下一行开头。又叫换行,在 UNIX、Linux 和 macOS 系统中,\n 用作行的结束符。

\r\n:表示回车并换行在 Windows 系统(及其兼容系统)中,\r\n 用作行的结束符

我们可以看下上面的结论对不对 使用我其他文章推荐的 nodepad++ 任意打开一个文件:

引入三个概念哈 ,CR、LF、CRLF。

CR:Carriage Return,对应ASCII中转义字符**\r**,表示回车
LF:Linefeed,对应ASCII中转义字符**\n**,表示换行
CRLF:Carriage Return & Linefeed,\r\n,表示回车并换行

以上是我项目中遇到的问题和浅显的理解记录,如果发现什么问题,欢迎留言,大家一起交流进步。

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在使用JavaScript的`JSON.parse()`函数解析多层嵌套的JSON字符串时,可能会遇到报错的情况。常见的报错信息可能是"JSON.parse: end of data after property starting at line..."或者"JSON.parse: unexpected character at line..."等。 解决这个问题的方法有以下几种: 1. 确保JSON字符串的格式正确:在进行JSON字符串的嵌套时,必须确保每一层的JSON字符串都是有效的。可以使用在线的JSON验证工具或者自行编写代码来验证JSON字符串是否符合标准的JSON格式。 2. 检查字符串特殊字符特殊字符,例如回车符、制表符、斜杠和引号等,可能会导致JSON.parse()函数无法正确解析字符串。需要在解析之前,对字符串特殊字符进行转义或修改。 3. 使用JSON.parse()的第二个参数:JSON.parse()函数的第二个参数可以是一个“reviver”函数,用来在解析过程修改解析出来的值。通过使用这个参数,可以自定义解析过程,处理特殊情况或者修复无法解析的值。 4. 递归解析嵌套的JSON:如果JSON字符串是多层嵌套的,需要使用递归的方法进行解析。首先将最外层的JSON字符串解析,然后再递归解析内层的JSON字符串,直到解析完成。 综上所述,要解决多层嵌套JSON字符串报错的问题,我们需要确保JSON字符串格式正确,检查特殊字符,使用合适的参数和递归的方式解析嵌套的JSON字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值