导航

json包含单双引号问题解决方案

Posted on 2017-04-12 17:55  _eve  阅读(2427)  评论(0编辑  收藏  举报

解决方案:在后台处理 JSONArray.fromObject(list).toString()

转自明明如月小角落

效果DEMO:

 

 

 

 

JsonQuotesUtil.js

 

[javascript] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 解决json传输数据时存在 同时存在单引号和双引号的问题 
  3.  * 
  4.  * 思路: 
  5.  * 
  6.  * 1 首选将 双引号转义 
  7.  * 
  8.  * 2 将 单双引号用不容易在字符串中出现的字符分别替换 
  9.  *   在后台 分别用过单双引号替换掉即可 
  10.  * 
  11.  * 注:可以传入字符串 也可以传入字符串数组 
  12.  * author: 明明如月 QQ 605283073 
  13.  * time:2015年5月19日15:33:44 
  14.  */  
  15.   
  16.  function JsonQuotesUtil()  
  17.  {  
  18.   
  19.      var defualtSingleQuotePlaceholder="s%0";//默认单引号占位符  
  20.      var defualtDoubleQuotePlaceholder="d%1";//默认双引号占位符  
  21.   
  22.      var singleQuotePlaceholder=defualtSingleQuotePlaceholder;//单引号占位符  
  23.      var doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;//双引号占位符  
  24.        
  25.     //设置单引号占位符(建议起不容易出现的字符)  
  26.      this.setSingleQuotePlaceholder = function(single)  
  27.      {  
  28.          singleQuotePlaceholder=single;  
  29.          return this;  
  30.      }  
  31.        
  32.     //设置双引号占位符(建议起不容易出现的字符)  
  33.      this.setDoubleQuotePlaceholder = function(double)  
  34.      {  
  35.          doubleQuotePlaceholder=double;  
  36.   
  37.          return this;  
  38.      }  
  39.        
  40.     //恢复默认单引号和双引号占位符  
  41.      this.restoreDefaults = function()  
  42.      {  
  43.          singleQuotePlaceholder=defualtSingleQuotePlaceholder;  
  44.          doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;  
  45.         return this;  
  46.      }  
  47.        
  48.     //用单引号占位符替换单引号 并返回替换后的字符串  
  49.      this.replaceSingleQuote=function (str)  
  50.      {  
  51.   
  52.          if(str instanceof  Array)//如果是数组分别替换  
  53.          {  
  54.              for(var i=0;i<str.length;i++)  
  55.              {  
  56.                 str[i]= str[i].replace(/'/g, singleQuotePlaceholder);  
  57.   
  58.              }  
  59.          }else  
  60.          {  
  61.              str= str[i].replace(/'/g, singleQuotePlaceholder);  
  62.          }  
  63.           return str;  
  64.      }  
  65.        
  66.      //用双引号替换符替换双引号 并返回替换后的字符串  
  67.      this.replaceDoubleQuote = function (str)  
  68.      {  
  69.         // return str.replace(/"/g, doubleQuotePlaceholder);  
  70.   
  71.          if(str instanceof  Array)//如果是数组分别替换  
  72.          {  
  73.              for(var i=0;i<str.length;i++)  
  74.              {  
  75.                  str[i]= str[i].replace(/'/g, doubleQuotePlaceholder);  
  76.   
  77.              }  
  78.          }else  
  79.          {  
  80.              str= str[i].replace(/'/g, doubleQuotePlaceholder);  
  81.          }  
  82.          return str;  
  83.   
  84.      }  
  85.   
  86.   
  87.   
  88.   
  89.      this.replaceSingleAndDoubleQuote = function(str)  
  90.      {  
  91.         // return str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);  
  92.          if(str instanceof  Array)//如果是数组分别替换  
  93.          {  
  94.              alert("1");  
  95.              for(var i=0;i<str.length;i++)  
  96.              {  
  97.                  alert(str[i]);  
  98.                  str[i]= str[i].replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);  
  99.   
  100.              }  
  101.          }else  
  102.          {  
  103.              str= str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);  
  104.          }  
  105.          return str;  
  106.      }  
  107.   
  108.   
  109.      //双引号转义  
  110.      this.escapeDoubleQuote = function(str)  
  111.      {  
  112.   
  113.   
  114.          if(str instanceof  Array)//如果是数组分别替换  
  115.          {  
  116.              alert("1");  
  117.              for(var i=0;i<str.length;i++)  
  118.              {  
  119.                  alert(str[i]);  
  120.                  str[i]= str[i].replace(/"/g,"\\\"");  
  121.   
  122.              }  
  123.          }else  
  124.          {  
  125.              str= str.replace(/"/g,"\\\"");;  
  126.          }  
  127.          return str;  
  128.      }  
  129.  }  
  130.    



 

 

 demo.js 使用范例:

 

[javascript] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * Created by Administrator on 2015/5/19 0019. 
  3.  */  
  4. $(function(){  
  5.   
  6.     //替换单双引号按钮的点击事件  
  7.     $("#show").click(function(){  
  8.   
  9.         var sourceStr =$("#sourceStr").val();//获取需要替换字符  
  10.   
  11.         /* 使用方法1 创建对象并自定义 单双引号占位符 
  12.            var jsonQuotesUtil = new JsonQuotesUtil().setSingleQuotePlaceholder 
  13.  
  14. ("%^^").setDoubleQuotePlaceholder("&&");//创建对象(同时自定义单双引占位符)*/  
  15.   
  16.         /* 使用方法2 自定义对象并自定义 单双引号占位符 
  17.            var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符 
  18.           jsonQuotesUtil.setSingleQuotePlaceholder("%^^"); 
  19.           jsonQuotesUtil.setDoubleQuotePlaceholder("##");*/  
  20.   
  21.   
  22.          // jsonQuotesUtil.restoreDefaults();//恢复默认的单双引号占位符  
  23.   
  24.   
  25.         /* 使用方法3 自定义对象并自定义 单双引号占位符 
  26.          var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符 
  27.           */  
  28.   
  29.   
  30.   
  31.   
  32.         var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符  
  33.   
  34.         var single =$("#single").val();//获取 单引号占位符  
  35.         var double = $("#double").val();//获取输入的双引号占位符  
  36.   
  37.         if($.trim(single)!="")  
  38.         {  
  39.             jsonQuotesUtil.setSingleQuotePlaceholder(single);//设置单引号占位符  
  40.         }  
  41.   
  42.         if($.trim(double)!="")  
  43.         {  
  44.             jsonQuotesUtil.setDoubleQuotePlaceholder(double);//设置双引号占位符  
  45.         }  
  46.   
  47.   
  48.         var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同时替换单双引  
  49.   
  50. 号  
  51.   
  52.   
  53.        // var reuslt = jsonQuotesUtil.escapeDoubleQuote(sourceStr)  
  54.          $("#replaceResult").html(reuslt);//显示替换后的字符串  
  55.   
  56.   
  57.   
  58.     });  
  59.   
  60.   
  61.   
  62.     $("#escape").click(function(){  
  63.   
  64.         var sourceStr =$("#sourceStr").val();//获取需要替换字符  
  65.   
  66.         var reuslt =  new JsonQuotesUtil().escapeDoubleQuote(sourceStr);  
  67.         $("#replaceResult").html(reuslt);//显示替换后的字符串  
  68.   
  69.     });  
  70.   
  71.     function arrayTest()//支持数组每个字符串的替换(没有调用)  
  72.     {  
  73.         var jsonQuotesUtil = new JsonQuotesUtil();//创建对象使用默认单双引号占位符  
  74.   
  75.         var sourceStr = new Array();  
  76.         sourceStr[0]="dfdfd'dfdf";  
  77.         sourceStr[1]="dfdfd\"sfdsfsd";  
  78.         alert("sourceStr"+sourceStr);  
  79.   
  80.         var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同时替换单双引  
  81.   
  82. 号  
  83.         alert( "after:"+reuslt);  
  84.     }  
  85. });  

 

JsonQuotesUtil Demo.html

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head lang="en">  
  4.     <meta charset="UTF-8">  
  5.     <title>JsonQuotesUtil Demo</title>  
  6.     <script type="text/javascript" src="libs/js/jquery.js"></script>  
  7.     <script type="text/javascript" src="libs/js/JsonQuotesUtil.js"></script>  
  8.     <script type="text/javascript" src="libs/js/demo.js"></script>  
  9. </head>  
  10.   
  11.     请输入带有单双引号的字符串:<br/>  
  12.           <textarea rows="10" cols="65" id="sourceStr">This is a simple solution for SingleQuote( ') and DoubleQuote(") in json </textarea>  
  13.   
  14. <br/><br/>  
  15.      单引号占位符:<input id="single" type="text" placeholder="s%0"/> &nbsp; 双引号占位符:<input id="double" type="text" placeholder="d%1"/>  
  16.   
  17. <br/> <br/>  
  18.           <input type="button" id="show" value="替换单双引号">&nbsp;<input type="button" id="escape" value="转义双引号">  
  19.          <br/>  
  20.         <span id="replaceResult"></span>  
  21.   
  22.   
  23.   
  24. </form>  
  25.   
  26. </body>  
  27. </html>  

 

 

后台解析Util:

 

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package reg;  
  2. /** 
  3.  * 解决json传输数据时存在 同时存在单引号和双引号的问题 
  4.  * 
  5.  * 思路: 
  6.  * 将 单双引号用不容易在字符串中出现的字符分别替换 
  7.  * 在后台 分别用过单双引号替换掉即可 
  8.  * 注:可以传入字符串 也可以传入字符串数组 
  9.  * 
  10.  * author: 明明如月 QQ 605283073 
  11.  * time:2015年5月19日15:33:44 
  12.  */  
  13. public class JsonQuotesUtil   
  14. {  
  15.     private  String defualtSingleQuotePlaceholder="s%0";//默认单引号占位符  
  16.     private   String defualtDoubleQuotePlaceholder="d%1";//默认双引号占位符  
  17.       
  18.     public JsonQuotesUtil()   
  19.     {  
  20.         super();  
  21.           
  22.     }  
  23.       
  24.     public JsonQuotesUtil(String defualtSingleQuotePlaceholder,  
  25.             String defualtDoubleQuotePlaceholder)   
  26.     {  
  27.         super();  
  28.         this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;  
  29.         this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;  
  30.     }  
  31.   
  32.     //恢复单引号(字符串)  
  33.     public    String restoreSingleQuotes(String str)  
  34.     {  
  35.         return str.replaceAll(defualtSingleQuotePlaceholder, "\'");  
  36.     }  
  37.       
  38.     public  String[]  restoreSingleQuotes(String[] strs)//恢复单引号(数组)  
  39.     {  
  40.         for(int i =0;i<strs.length;i++)  
  41.         {  
  42.             strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");  
  43.         }  
  44.          return strs;  
  45.     }  
  46.       
  47.     //恢复双引号  
  48.     public   String restoreDoubleQuote(String str)//恢复单引号(数组)  
  49.     {  
  50.         return str.replaceAll(defualtDoubleQuotePlaceholder, "\"");  
  51.     }  
  52.     public   String[] restoreDoubleQuote(String[] strs)  
  53.     {  
  54.         for(int i =0;i<strs.length;i++)  
  55.         {  
  56.             strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");  
  57.         }  
  58.          return strs;  
  59.           
  60.     }  
  61.       
  62.       
  63.     //恢复单双引号  
  64.     public   String restoreSingleAndDoubleQuote(String str)  
  65.     {  
  66.         return str.replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");  
  67.     }  
  68.     public   String[] restoreSingleAndDoubleQuote(String[] strs)//恢复单双引号(数组)  
  69.     {  
  70.         for(int i =0;i<strs.length;i++)  
  71.         {  
  72.             strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");  
  73.         }  
  74.          return strs;  
  75.       
  76.     }  
  77.   
  78.     public String getDefualtSingleQuotePlaceholder()   
  79.     {  
  80.         return defualtSingleQuotePlaceholder;  
  81.     }  
  82.   
  83.     public void setDefualtSingleQuotePlaceholder(String defualtSingleQuotePlaceholder)  
  84.     {  
  85.         this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;  
  86.     }  
  87.   
  88.     public String getDefualtDoubleQuotePlaceholder()  
  89.     {  
  90.         return defualtDoubleQuotePlaceholder;  
  91.     }  
  92.   
  93.     public void setDefualtDoubleQuotePlaceholder(String defualtDoubleQuotePlaceholder)  
  94.     {  
  95.         this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;  
  96.     }  
  97.       
  98.       
  99.   
  100. }  


Util使用方法:

 

 

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
    1. package reg;  
    2.   
    3. public class JsonQuotesUtilDemo   
    4. {  
    5.   
    6.       
    7.       
    8.     public static void main(String args[])  
    9.     {  
    10.         //获取前台传入的参数  
    11.         String str="This is a simple solution for SingleQuote(s%0) and DoubleQuote(d%1) in json This is a simple solution for SingleQuote(s%0) and DoubleQuote(d%1) in json";  
    12.           
    13.         JsonQuotesUtil jsonQuotesUtil = new JsonQuotesUtil("s%0","d%1");  
    14.         System.out.println(jsonQuotesUtil.restoreSingleAndDoubleQuote(str));  
    15.     }  
    16.       
    17.   
    18. }