解決方案:在后台處理 JSONArray.fromObject(list).toString()
轉自明明如月小角落:
效果DEMO:
JsonQuotesUtil.js
- /**
- * 解決json傳輸數據時存在 同時存在單引號和雙引號的問題
- *
- * 思路:
- *
- * 1 首選將 雙引號轉義
- *
- * 2 將 單雙引號用不容易在字符串中出現的字符分別替換
- * 在后台 分別用過單雙引號替換掉即可
- *
- * 注:可以傳入字符串 也可以傳入字符串數組
- * author: 明明如月 QQ 605283073
- * time:2015年5月19日15:33:44
- */
- function JsonQuotesUtil()
- {
- var defualtSingleQuotePlaceholder="s%0";//默認單引號占位符
- var defualtDoubleQuotePlaceholder="d%1";//默認雙引號占位符
- var singleQuotePlaceholder=defualtSingleQuotePlaceholder;//單引號占位符
- var doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;//雙引號占位符
- //設置單引號占位符(建議起不容易出現的字符)
- this.setSingleQuotePlaceholder = function(single)
- {
- singleQuotePlaceholder=single;
- return this;
- }
- //設置雙引號占位符(建議起不容易出現的字符)
- this.setDoubleQuotePlaceholder = function(double)
- {
- doubleQuotePlaceholder=double;
- return this;
- }
- //恢復默認單引號和雙引號占位符
- this.restoreDefaults = function()
- {
- singleQuotePlaceholder=defualtSingleQuotePlaceholder;
- doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;
- return this;
- }
- //用單引號占位符替換單引號 並返回替換后的字符串
- this.replaceSingleQuote=function (str)
- {
- if(str instanceof Array)//如果是數組分別替換
- {
- for(var i=0;i<str.length;i++)
- {
- str[i]= str[i].replace(/'/g, singleQuotePlaceholder);
- }
- }else
- {
- str= str[i].replace(/'/g, singleQuotePlaceholder);
- }
- return str;
- }
- //用雙引號替換符替換雙引號 並返回替換后的字符串
- this.replaceDoubleQuote = function (str)
- {
- // return str.replace(/"/g, doubleQuotePlaceholder);
- if(str instanceof Array)//如果是數組分別替換
- {
- for(var i=0;i<str.length;i++)
- {
- str[i]= str[i].replace(/'/g, doubleQuotePlaceholder);
- }
- }else
- {
- str= str[i].replace(/'/g, doubleQuotePlaceholder);
- }
- return str;
- }
- this.replaceSingleAndDoubleQuote = function(str)
- {
- // return str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);
- if(str instanceof Array)//如果是數組分別替換
- {
- alert("1");
- for(var i=0;i<str.length;i++)
- {
- alert(str[i]);
- str[i]= str[i].replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);
- }
- }else
- {
- str= str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);
- }
- return str;
- }
- //雙引號轉義
- this.escapeDoubleQuote = function(str)
- {
- if(str instanceof Array)//如果是數組分別替換
- {
- alert("1");
- for(var i=0;i<str.length;i++)
- {
- alert(str[i]);
- str[i]= str[i].replace(/"/g,"\\\"");
- }
- }else
- {
- str= str.replace(/"/g,"\\\"");;
- }
- return str;
- }
- }
demo.js 使用范例:
- /**
- * Created by Administrator on 2015/5/19 0019.
- */
- $(function(){
- //替換單雙引號按鈕的點擊事件
- $("#show").click(function(){
- var sourceStr =$("#sourceStr").val();//獲取需要替換字符
- /* 使用方法1 創建對象並自定義 單雙引號占位符
- var jsonQuotesUtil = new JsonQuotesUtil().setSingleQuotePlaceholder
- ("%^^").setDoubleQuotePlaceholder("&&");//創建對象(同時自定義單雙引占位符)*/
- /* 使用方法2 自定義對象並自定義 單雙引號占位符
- var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符
- jsonQuotesUtil.setSingleQuotePlaceholder("%^^");
- jsonQuotesUtil.setDoubleQuotePlaceholder("##");*/
- // jsonQuotesUtil.restoreDefaults();//恢復默認的單雙引號占位符
- /* 使用方法3 自定義對象並自定義 單雙引號占位符
- var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符
- */
- var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符
- var single =$("#single").val();//獲取 單引號占位符
- var double = $("#double").val();//獲取輸入的雙引號占位符
- if($.trim(single)!="")
- {
- jsonQuotesUtil.setSingleQuotePlaceholder(single);//設置單引號占位符
- }
- if($.trim(double)!="")
- {
- jsonQuotesUtil.setDoubleQuotePlaceholder(double);//設置雙引號占位符
- }
- var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同時替換單雙引
- 號
- // var reuslt = jsonQuotesUtil.escapeDoubleQuote(sourceStr)
- $("#replaceResult").html(reuslt);//顯示替換后的字符串
- });
- $("#escape").click(function(){
- var sourceStr =$("#sourceStr").val();//獲取需要替換字符
- var reuslt = new JsonQuotesUtil().escapeDoubleQuote(sourceStr);
- $("#replaceResult").html(reuslt);//顯示替換后的字符串
- });
- function arrayTest()//支持數組每個字符串的替換(沒有調用)
- {
- var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符
- var sourceStr = new Array();
- sourceStr[0]="dfdfd'dfdf";
- sourceStr[1]="dfdfd\"sfdsfsd";
- alert("sourceStr"+sourceStr);
- var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同時替換單雙引
- 號
- alert( "after:"+reuslt);
- }
- });
JsonQuotesUtil Demo.html
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title>JsonQuotesUtil Demo</title>
- <script type="text/javascript" src="libs/js/jquery.js"></script>
- <script type="text/javascript" src="libs/js/JsonQuotesUtil.js"></script>
- <script type="text/javascript" src="libs/js/demo.js"></script>
- </head>
- 請輸入帶有單雙引號的字符串:<br/>
- <textarea rows="10" cols="65" id="sourceStr">This is a simple solution for SingleQuote( ') and DoubleQuote(") in json </textarea>
- <br/><br/>
- 單引號占位符:<input id="single" type="text" placeholder="s%0"/> 雙引號占位符:<input id="double" type="text" placeholder="d%1"/>
- <br/> <br/>
- <input type="button" id="show" value="替換單雙引號"> <input type="button" id="escape" value="轉義雙引號">
- <br/>
- <span id="replaceResult"></span>
- </form>
- </body>
- </html>
后台解析Util:
- package reg;
- /**
- * 解決json傳輸數據時存在 同時存在單引號和雙引號的問題
- *
- * 思路:
- * 將 單雙引號用不容易在字符串中出現的字符分別替換
- * 在后台 分別用過單雙引號替換掉即可
- * 注:可以傳入字符串 也可以傳入字符串數組
- *
- * author: 明明如月 QQ 605283073
- * time:2015年5月19日15:33:44
- */
- public class JsonQuotesUtil
- {
- private String defualtSingleQuotePlaceholder="s%0";//默認單引號占位符
- private String defualtDoubleQuotePlaceholder="d%1";//默認雙引號占位符
- public JsonQuotesUtil()
- {
- super();
- }
- public JsonQuotesUtil(String defualtSingleQuotePlaceholder,
- String defualtDoubleQuotePlaceholder)
- {
- super();
- this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;
- this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;
- }
- //恢復單引號(字符串)
- public String restoreSingleQuotes(String str)
- {
- return str.replaceAll(defualtSingleQuotePlaceholder, "\'");
- }
- public String[] restoreSingleQuotes(String[] strs)//恢復單引號(數組)
- {
- for(int i =0;i<strs.length;i++)
- {
- strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");
- }
- return strs;
- }
- //恢復雙引號
- public String restoreDoubleQuote(String str)//恢復單引號(數組)
- {
- return str.replaceAll(defualtDoubleQuotePlaceholder, "\"");
- }
- public String[] restoreDoubleQuote(String[] strs)
- {
- for(int i =0;i<strs.length;i++)
- {
- strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");
- }
- return strs;
- }
- //恢復單雙引號
- public String restoreSingleAndDoubleQuote(String str)
- {
- return str.replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");
- }
- public String[] restoreSingleAndDoubleQuote(String[] strs)//恢復單雙引號(數組)
- {
- for(int i =0;i<strs.length;i++)
- {
- strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");
- }
- return strs;
- }
- public String getDefualtSingleQuotePlaceholder()
- {
- return defualtSingleQuotePlaceholder;
- }
- public void setDefualtSingleQuotePlaceholder(String defualtSingleQuotePlaceholder)
- {
- this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;
- }
- public String getDefualtDoubleQuotePlaceholder()
- {
- return defualtDoubleQuotePlaceholder;
- }
- public void setDefualtDoubleQuotePlaceholder(String defualtDoubleQuotePlaceholder)
- {
- this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;
- }
- }
Util使用方法:
- package reg;
- public class JsonQuotesUtilDemo
- {
- public static void main(String args[])
- {
- //獲取前台傳入的參數
- 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";
- JsonQuotesUtil jsonQuotesUtil = new JsonQuotesUtil("s%0","d%1");
- System.out.println(jsonQuotesUtil.restoreSingleAndDoubleQuote(str));
- }
- }