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串的内容有问题的话,在找别的办法吧。。。。

你可能感兴趣的:(AngularJs)