线上报出一个错误,大概看了一下,错误内容为:syntax error, pos 1, line 1, column 2,堆栈信息,很明显是fastjson格式化报错了,心想,这还不简单,人肉检查json是不是符合json格式即可,看到日志记录的json,我才意识到没那么简单,json格式相当简单,只有两对kv,看起来也没有任何问题。差不多就是这样的一个格式:{"a":"123","b":"456"} 将起放入json解析中,也完全可以解析。此处省略几个小时的心理活动以及推论。下面直接上答案。
最后我搞到了最原始的json,然后发现前面有一个不可见字符\u200B(注意,不是空格,就是不可见,没有宽度,有和没有肉眼根本看不出来),方法也很简单,在idea中写一个字符串,复制放到""中,隐藏字符串就无所遁形了。
原因找到了,说下解决方案,那肯定是让他们改json,去掉非法字符串,但是像这种不可见的,对用户来说根本不可感知,怎么能知道是否合法呢,体感会非常查。(因为历史原因,也不可能提交的时候做检查,即使检查出来,用户也不知道怎么改)
那么我们可以在代码中进行非法字符的去除,非法字符不仅仅是这一种还可能会有其他。下面贴一个正则去除的方式。
str1.replaceAll("\\p{C}", "");