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

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

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

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

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

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

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

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

replace(/\‘/g,"'").

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

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

文字:

数据库:

原文地址:https://www.cnblogs.com/sunny3158/p/11608590.html

时间: 2024-10-09 06:19:10

JSON.parse()解析该json字符串,特殊字符串引起报错的相关文章

JSON.parse 解析json字符串时,遇换行符报错

今天遇到后台返回的json字符串转对象时报错了,发现有个textarea提交的字段里有换行符. 错误原因:JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 可以用str.replace(/\n/g,"\\\\n")转义,'\\'转成单个'\','\\n'转成'\n',最后转成'\\n'这样就可以用parse转成对象时变为'\n',取出的字符串设置到html文本中\n被解析为换行. ECMA Script注明json字符串中需要转义的字符: 测试: 1.var

JSON.parse解析报错解决方法

res = JSON.parse(result.replace(/\n/g,"\\n").replace(/\r/g,"\\r"));//转义str_o = res.result;str_n = str_o.replace(/\\n/g,"\r\n");//解析后再转回来 摘自:https://blog.csdn.net/qq_31934975/article/details/78364301 原文地址:https://www.cnblogs.c

time.strftime:格式化字符串中含中文报错处理

import time print(time.strftime("%Y年%m月%d日 %H时%M分%S秒",time.localtime())) 报错: UnicodeEncodeError: 'locale' codec can't encode character '\u5e74' in position 2: Illegal byte sequence 打印当前时间 import time print(time.localtime()) 运行结果: time.struct_tim

解决:sudo: parse error in /etc/sudoers near line 24 ...报错

ubuntu系统下由于添加用户权限的时候直接用的vim对 /etc/sudoers 文件编辑,保存退出的时候,再使用sudo su 等等命令一直报错如下: sudo: parse error in /etc/sudoers near line 24 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin 原因是直接用vim修改文件时报错,参考Google说,应该用visudo命

字符串判空有空格报错:binary operator expected

使用-z或-n对一个变量判空时,需要注意若直接使用[ -n ${ARG} ]这种形式,若${ARG}中有空格将会报错, #!/bin/bash ARG="sd dd" if [ -n ${ARG} ]; then echo 'ARG:' ${ARG} else echo 'ARG is empty.' fi 输出: line 27: [: sd: binary operator expected ARG is empty. 解决方法,使用[[ -n ${ARG} ]]或[ -n &qu

JSON.parse 与 eval() 对于解析json的问题

1.eval()与JSOn.parse的不同 eval() var c = 1; //全局变量 var jsonstr1 = '{"name":"a","company":"b","value":++c}'; var json1 = eval('(' + jsonstr1 + ')'); console.log(json1.value); c是全局变量为1,但是经过eval的解析,全局变量变成了2!(这样的

JSON.parse(jsonStr)和eval(&#39;(&#39;+jsonStr+&#39;)&#39;)

我们先初始化一个json格式的对象: var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDate + ')' );  // eval();方法 var jsonObj = JSON.parse( jsonDate );  // JSON.parse(); 方法 然后在控制台调用: console.log( jsonObj.name );  // 两种方

学习下ajax——json的 解析

来自http://www.cnblogs.com/mylove103104/p/4599001.html .感谢其博主. Ajax中解析Json的两种方法详解 eval();  //此方法不推荐 JSON.parse();  //推荐方法 一.两种方法的区别 我们先初始化一个json格式的对象: var jsonDate = '{ "name":"周星驰","age":23 }' var jsonObj = eval( '(' + jsonDat

解决ajax请求返回Json无法解析&quot;\&quot;字符的问题

原因:获取身份证信息,涉及图片路径,存在“\”字符,导致Json解析错误 解决思路:将返回类型从"json"改成"text",此时返回的数据类型变成字符串,将字符串的"\"替换成"/",此时不存在Json格式错误的问题, 再调用Json.parse解析成Json格式 $.ajax({ type : "GET", //提交方式 url : "http://127.0.0.1:24010/ZKIDRO