JSON.parse()解析该json字符串,特殊字符串引起报错
Posted sunny123456
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON.parse()解析该json字符串,特殊字符串引起报错相关的知识,希望对你有一定的参考价值。
主要的特殊字符:英文(半角)状态的 单引号 ‘ 双引号" 斜杠 \\ 反斜杠 / and符号& 大于号 > 小于号 < 空格
9个特殊符号,可以采取录入的时候进行控制,禁止输入。或者在存入数据库的时候进行转义。或者从数据库取出时候转义。或者在页面进行转义替换等方案。
涉及到:特殊字符可能对 数据库代码 js造成错误。所以要考虑 数据库特殊字符 编写语言特殊字符 html页面特殊字符等。
方案一、存入数据库前对数据进行转义
json串中包含特殊的字符时,可用正则过滤,把特殊的字符改成对应的,存入数据库
value.replace(/\\&/g,"&").
replace(/\\"/g,""").
replace(/\\\'/g,"'").
replace(/\\</g,"<").
replace(/\\>/g,">")
原文链接:https://blog.csdn.net/liushuiziyouliu/article/details/76348830
方案二 从数据库中取出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();
}
java 单引号保存数据库之前进行单独的处理之后在保存数据库:
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();
}
方案三 js解决办法 使用JSON.parse()前 把特殊字符串进行替换
方案四、从数据库取出后处理
在对数据库取出来的数据(特别是描写叙述信息)里面含有特殊字符的话。使用JSON.parse将json字符串转换成json对象的时候会出错,主要是双引號,回车换行等影响明显,左尖括号和右尖括号也会导致显示问题,所以要在输出到页面进行json对象转换之前将一些特殊符合进行编码或转义,以下展示的是C#代码编码和转义几个经常使用特殊字符。经过笔者測试,将这些符号编码和转义之后,大部分json字符串都能够转换成json对象了。假设遇到个别问题,应朝着这个方向去查找问题。
theString = theString.Replace(">", ">"); theString = theString.Replace("<", "<"); theString = theString.Replace(" ", " "); theString = theString.Replace("\\"", """); theString = theString.Replace("\\\'", "'"); theString = theString.Replace("\\\\", "\\\\\\\\");//对斜线的转义 theString = theString.Replace("\\n", "\\\\n"); theString = theString.Replace("\\r", "\\\\r");
注意:\\r是回到行首。\\n是新启一行,这两个一般同一时候出现,应该同一时候处理。
补充:文字中间的换行,空格在数据库里面不以\\r\\n, ;等形式显示出来(“本书”与“前80”之间换行。“由”与“曹雪芹”之间空格)
文字:
数据库:
以上是关于JSON.parse()解析该json字符串,特殊字符串引起报错的主要内容,如果未能解决你的问题,请参考以下文章
JSON.parse 解析json字符串时,遇字符串换行符,解析失败