Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 783|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-4-6 11:05
  • 签到天数: 748 天

    [LV.9]以坛为家II

    2034

    主题

    2092

    帖子

    70万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    705612
    发表于 2021-8-31 16:58:53 | 显示全部楼层 |阅读模式

    解决方案:在后台处理 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= str.replace(/'/g, singleQuotePlaceholder);  
    57.   
    58.              }  
    59.          }else  
    60.          {  
    61.              str= str.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= str.replace(/'/g, doubleQuotePlaceholder);  
    76.   
    77.              }  
    78.          }else  
    79.          {  
    80.              str= str.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);  
    98.                  str= str.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);  
    120.                  str= str.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= strs.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= strs.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= strs.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. }  
    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-20 01:37 , Processed in 0.076752 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表