bug记录:Json Parsing Error : JSON.parse: bad control character in string literal

背景

其实是传数据到页面上时候要把json传转成js的对象,开发用的是angularJs里面带的angular.fromJson();报了如题目的错。

过程

查了一下,把问题锁定到了传到前台的json串里面有tab键,制表符之类特殊的符号,所以解析成json出错了。
可以去首先可以去http://jsonlint.com/先检验一下json,来排除是否是非法字符的问题,然后如果是存在非法字符的话,就将字符串trim()一下, 不过.trim()好像只能去掉文字开头和结尾的空格或换行吧?

我也没有用过,不知道具体是什么,但是我trim了也没啥用。所以我比较相信trim()是只去掉开头和结尾这种说法的。

后来我有相继尝试了,在后台传给页面之前将字符串里面的“非法字符”去掉,用了java里面的replace()和replaceAll(),知道了replace(str1,str2)是将字符串里面的子串str1替换成str2,replaceAll(regex,str)是把满足regex的正则表达式的字符串换成str。

在这里提下用的正则表达式为:”[\\s\\t\\n\\r]”//我也不是很懂正则表达式的,这个只知道能用,以后有机会可以学学还是有很多地方会用到正则表达式的。(我好醉啊,直接把正则粘到这里看了一眼右边少一个斜杠,只好多添一个才在右边正常显示了,这个编辑器意外的有萌感。。

这么替换过以后还不能用,因为不知道这个字符串为什么最开始得到的时候是有明文的“\n”的,我在替换的时候替换不掉这个明文的”\n”,但是在存库后再取出来的时候,这个明文的“\n”就不见了,变成了转义的换行符【WTF,所以我又把原来字符串里的“\\n”这种东西去掉了,终于好了。。
后来问传过来信息的同事,他说那串字符串直接复制粘贴就会进行一次转义,原因我也没问清楚。。希望有大大知道是怎么回事的能在看到这篇博文的时候告诉我,我也超好奇啊。

总结

大概就是先判断一下json的格式是否有问题,如果有问题,用各种方法去掉json里面的\t,\n,\f,\r之类的字符,连转义之前的也要去掉。然后就能正常转了。如果不是json串的内容有问题的话,在找别的办法吧。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值