第一种方案:
json串中包含特殊的字符时,可用正则过滤,把特殊的字符改成对应的,存入数据库
value.replace(/\&/g,"&").
replace(/\"/g,""").
replace(/\'/g,"'").
replace(/\</g,"<").
replace(/\>/g,">")
这样前台取的时候就不会出现错误了。
第二种方案:
从数据库中取出json返回前台之前转化:
注意:对单引号这个方法不适用,单引号只能存数据库之前进行转义
public static String stringToJson(String s) {
StringBuffer sb = new StringBuffer ();
for (int i=0; i<s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
// case '\\': //如果不处理单引号,可以释放此段代码,若结合下面的方法处理单引号就必须注释掉该段代码
// sb.append("\\\\");
// break;
case '/':
sb.append("\\/");
break;
case '\b': //退格
sb.append("\\b");
break;
case '\f': //走纸换页
sb.append("\\f");
break;
case '\n':
sb.append("\\n"); //换行
break;
case '\r': //回车
sb.append("\\r");
break;
case '\t': //横向跳格
sb.append("\\t");
break;
default:
sb.append(c);
}}
return sb.toString();
}
单引号保存数据库之前进行单独的处理之后在保存数据库:
public static String StringDanYinToJSON(String ors) {
ors = ors == null ? "" : ors;
StringBuffer buffer = new StringBuffer(ors);
int i = 0;
while (i < buffer.length()) {
if (buffer.charAt(i) == '\'' || buffer.charAt(i) == '\\') {
buffer.insert(i, '\\');
i += 2;
} else {
i++;
}
}
return buffer.toString();
}