JSON文件中非法字符的处理
作者: 日期: 2012 年 9 月 9 日 (4)JSON是一种很好的数据格式,但是简单之处也有麻烦的地方,比如如果JSON的字符串里面出现了双引号的话,那真是搞死人了。
之前我很傻,每次抛出异常,我就根据异常显示的位置,去慢慢一个一个找错误的地方,昨天才发现,网上有很多免费的JSON检查的网站, 这个就很不错,把你的JSON文件粘贴过去,有错误的时候,就会显示第几行哪里错误了。
还有一个比较麻烦的是,有时候你需要写一个自动程序处理JSON数据,但是可能传过来的JSON数据就有非法字符怎么办?我遇到的就是从网上爬取数据的时候出现了这样的问题,居然有字符串出现了双引号没有转义(有些又是转义了的),还出现了换行符。我一直纠结不知道该怎么处理。今晚想到了一个办法,我发现JSON的合法双引号的出现都是有规律的,比如{" ,:" ,",,这样的形式。然后我们可以先将这些合法的双引号用个特殊字符替代一下,比如我把 {" 替换为 {t ,然后再把替换完毕的字符串里面还剩的双引号全部去掉,这些剩下的双引号就是非法的了。我是把所有合法的双引号都用t表示了,现在只要把t转换为双引号就可以了。大致代码如下:
12345678910jsonString = jsonString.replaceAll(
"n"
,
""
);
jsonString = jsonString.replaceAll(
"{"
","
{t");
jsonString = jsonString.replaceAll(
""
}
","
t}");
jsonString = jsonString.replaceAll(
""
:
","
t:");
jsonString = jsonString.replaceAll(
""
,
","
t,");
jsonString = jsonString.replaceAll(
","
","
,t");
jsonString = jsonString.replaceAll(
":"
","
:t");
jsonString = jsonString.replaceAll(
""
","
""
);
jsonString = jsonString.replaceAll(
"t"
,
""
");
jsonString = jsonString.replaceAll(
"\","
");