加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

JSON.parse()解析该json字符串,特殊字符串引起报错

发布时间:2020-12-16 18:39:23 所属栏目:百科 来源:网络整理
导读:主要的特殊字符:英文(半角)状态的 单引号 ‘ 双引号"? 斜杠 ? 反斜杠 /? and符号? ?大于号 ? 小于号 ? ?空格? 9个特殊符号,可以采取录入的时候进行控制,禁止输入。或者在存入数据库的时候进行转义。或者从数据库取出时候转义。或者在页面进行转义替换

主要的特殊字符:英文(半角)状态的 单引号 ‘ 双引号"? 斜杠 ? 反斜杠 /? and符号&? ?大于号 >? 小于号 <? ?空格?

9个特殊符号,可以采取录入的时候进行控制,禁止输入。或者在存入数据库的时候进行转义。或者从数据库取出时候转义。或者在页面进行转义替换等方案。

涉及到:特殊字符可能对? 数据库代码 js造成错误。所以要考虑 数据库特殊字符? ? ?编写语言特殊字符? ?html页面特殊字符等。

方案一、存入数据库前对数据进行转义??

json串中包含特殊的字符时,可用正则过滤,把特殊的字符改成对应的,存入数据库

value.replace(/&;/g,"&amp;").

replace(/"/g,"&quot;").

replace(/‘/g,"&#39;").

replace(/&;/g,"&lt;").

replace(/&;/g,"&gt;")

原文链接: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(">","&gt;");
            theString = theString.Replace("<","&lt;");
            theString = theString.Replace(" ","&nbsp;");
            theString = theString.Replace(""","&quot;");
?           theString = theString.Replace("‘","&#39;");
            theString = theString.Replace("","\");//对斜线的转义
?           theString = theString.Replace("n","n");
            theString = theString.Replace("r","r");
注意:r是回到行首。n是新启一行,这两个一般同一时候出现,应该同一时候处理。

?

?

补充:文字中间的换行,空格在数据库里面不以rn,&nbsp;;等形式显示出来(“本书”与“前80”之间换行。“由”与“曹雪芹”之间空格)

文字:

?

?

?

数据库:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读