1. 程式人生 > >json包含單雙引號問題解決方案

json包含單雙引號問題解決方案

htm ini reat 編程 定義 ava 需要 但是 idt

json包含單雙引號問題解決方案http://www.bieryun.com/1197.html

技術分享圖片

最近項目中 遇到需要JSON傳數據 但是某個字段 裏面可能含有 雙引號和單引號 導致出現錯誤

為了方便 寫了一個工具類,比較好用。

支持“鏈式編程”

分享給大家

360網盤下載地址:http://yunpan.cn/cjCrRZj9uc8hE 訪問密碼 79f3

效果DEMO:

技術分享圖片

技術分享圖片

技術分享圖片

JsonQuotesUtil.js

[javascript] view plain copy

  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. function JsonQuotesUtil()

  16. {


  17. var defualtSingleQuotePlaceholder="s%0";//默認單引號占位符

  18. var defualtDoubleQuotePlaceholder="d%1";//默認雙引號占位符


  19. var singleQuotePlaceholder=defualtSingleQuotePlaceholder;//單引號占位符

  20. var doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;//雙引號占位符


  21. //設置單引號占位符(建議起不容易出現的字符)

  22. this.setSingleQuotePlaceholder = function(single)

  23. {

  24. singleQuotePlaceholder=single;

  25. return this;

  26. }


  27. //設置雙引號占位符(建議起不容易出現的字符)

  28. this.setDoubleQuotePlaceholder = function(double)

  29. {

  30. doubleQuotePlaceholder=double;


  31. return this;

  32. }


  33. //恢復默認單引號和雙引號占位符

  34. this.restoreDefaults = function()

  35. {

  36. singleQuotePlaceholder=defualtSingleQuotePlaceholder;

  37. doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;

  38. return this;

  39. }


  40. //用單引號占位符替換單引號 並返回替換後的字符串

  41. this.replaceSingleQuote=function (str)

  42. {


  43. if(str instanceof Array)//如果是數組分別替換

  44. {

  45. for(var i=0;i<str.length;i++)

  46. {

  47. str[i]= str[i].replace(/'/g, singleQuotePlaceholder);


  48. }

  49. }else

  50. {

  51. str= str[i].replace(/'/g, singleQuotePlaceholder);

  52. }

  53. return str;

  54. }


  55. //用雙引號替換符替換雙引號 並返回替換後的字符串

  56. this.replaceDoubleQuote = function (str)

  57. {

  58. // return str.replace(/"/g, doubleQuotePlaceholder);


  59. if(str instanceof Array)//如果是數組分別替換

  60. {

  61. for(var i=0;i<str.length;i++)

  62. {

  63. str[i]= str[i].replace(/'/g, doubleQuotePlaceholder);


  64. }

  65. }else

  66. {

  67. str= str[i].replace(/'/g, doubleQuotePlaceholder);

  68. }

  69. return str;


  70. }





  71. this.replaceSingleAndDoubleQuote = function(str)

  72. {

  73. // return str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);

  74. if(str instanceof Array)//如果是數組分別替換

  75. {

  76. alert("1");

  77. for(var i=0;i<str.length;i++)

  78. {

  79. alert(str[i]);

  80. str[i]= str[i].replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);


  81. }

  82. }else

  83. {

  84. str= str.replace(/'/g,singleQuotePlaceholder).replace(/"/g, doubleQuotePlaceholder);

  85. }

  86. return str;

  87. }



  88. //雙引號轉義

  89. this.escapeDoubleQuote = function(str)

  90. {



  91. if(str instanceof Array)//如果是數組分別替換

  92. {

  93. alert("1");

  94. for(var i=0;i<str.length;i++)

  95. {

  96. alert(str[i]);

  97. str[i]= str[i].replace(/"/g,"\\\"");


  98. }

  99. }else

  100. {

  101. str= str.replace(/"/g,"\\\"");;

  102. }

  103. return str;

  104. }

  105. }


demo.js 使用範例:

[javascript] view plain copy

  1. /**

  2. * Created by Administrator on 2015/5/19 0019.

  3. */

  4. $(function(){


  5. //替換單雙引號按鈕的點擊事件

  6. $("#show").click(function(){


  7. var sourceStr =$("#sourceStr").val();//獲取需要替換字符


  8. /* 使用方法1 創建對象並自定義 單雙引號占位符

  9. var jsonQuotesUtil = new JsonQuotesUtil().setSingleQuotePlaceholder


  10. ("%^^").setDoubleQuotePlaceholder("&&");//創建對象(同時自定義單雙引占位符)*/


  11. /* 使用方法2 自定義對象並自定義 單雙引號占位符

  12. var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符

  13. jsonQuotesUtil.setSingleQuotePlaceholder("%^^");

  14. jsonQuotesUtil.setDoubleQuotePlaceholder("##");*/



  15. // jsonQuotesUtil.restoreDefaults();//恢復默認的單雙引號占位符



  16. /* 使用方法3 自定義對象並自定義 單雙引號占位符

  17. var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符

  18. */





  19. var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符


  20. var single =$("#single").val();//獲取 單引號占位符

  21. var double = $("#double").val();//獲取輸入的雙引號占位符


  22. if($.trim(single)!="")

  23. {

  24. jsonQuotesUtil.setSingleQuotePlaceholder(single);//設置單引號占位符

  25. }


  26. if($.trim(double)!="")

  27. {

  28. jsonQuotesUtil.setDoubleQuotePlaceholder(double);//設置雙引號占位符

  29. }



  30. var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同時替換單雙引




  31. // var reuslt = jsonQuotesUtil.escapeDoubleQuote(sourceStr)

  32. $("#replaceResult").html(reuslt);//顯示替換後的字符串




  33. });




  34. $("#escape").click(function(){


  35. var sourceStr =$("#sourceStr").val();//獲取需要替換字符


  36. var reuslt = new JsonQuotesUtil().escapeDoubleQuote(sourceStr);

  37. $("#replaceResult").html(reuslt);//顯示替換後的字符串


  38. });


  39. function arrayTest()//支持數組每個字符串的替換(沒有調用)

  40. {

  41. var jsonQuotesUtil = new JsonQuotesUtil();//創建對象使用默認單雙引號占位符


  42. var sourceStr = new Array();

  43. sourceStr[0]="dfdfd'dfdf";

  44. sourceStr[1]="dfdfd\"sfdsfsd";

  45. alert("sourceStr"+sourceStr);


  46. var reuslt = jsonQuotesUtil.replaceSingleAndDoubleQuote(sourceStr);//同時替換單雙引


  47. alert( "after:"+reuslt);

  48. }

  49. });

JsonQuotesUtil Demo.html

[html] view plain copy

  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. 請輸入帶有單雙引號的字符串:<br/>

  11. <textarea rows="10" cols="65" id="sourceStr">This is a simple solution for SingleQuote( ') and DoubleQuote(") in json </textarea>


  12. <br/><br/>

  13. 單引號占位符:<input id="single" type="text" placeholder="s%0"/> &nbsp; 雙引號占位符:<input id="double" type="text" placeholder="d%1"/>


  14. <br/> <br/>

  15. <input type="button" id="show" value="替換單雙引號">&nbsp;<input type="button" id="escape" value="轉義雙引號">

  16. <br/>

  17. <span id="replaceResult"></span>




  18. </form>


  19. </body>

  20. </html>

後臺解析Util:

[java] view plain copy

  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. public JsonQuotesUtil()

  18. {

  19. super();


  20. }


  21. public JsonQuotesUtil(String defualtSingleQuotePlaceholder,

  22. String defualtDoubleQuotePlaceholder)

  23. {

  24. super();

  25. this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;

  26. this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;

  27. }


  28. //恢復單引號(字符串)

  29. public String restoreSingleQuotes(String str)

  30. {

  31. return str.replaceAll(defualtSingleQuotePlaceholder, "\'");

  32. }


  33. public String[] restoreSingleQuotes(String[] strs)//恢復單引號(數組)

  34. {

  35. for(int i =0;i<strs.length;i++)

  36. {

  37. strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");

  38. }

  39. return strs;

  40. }


  41. //恢復雙引號

  42. public String restoreDoubleQuote(String str)//恢復單引號(數組)

  43. {

  44. return str.replaceAll(defualtDoubleQuotePlaceholder, "\"");

  45. }

  46. public String[] restoreDoubleQuote(String[] strs)

  47. {

  48. for(int i =0;i<strs.length;i++)

  49. {

  50. strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'");

  51. }

  52. return strs;


  53. }



  54. //恢復單雙引號

  55. public String restoreSingleAndDoubleQuote(String str)

  56. {

  57. return str.replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");

  58. }

  59. public String[] restoreSingleAndDoubleQuote(String[] strs)//恢復單雙引號(數組)

  60. {

  61. for(int i =0;i<strs.length;i++)

  62. {

  63. strs[i]= strs[i].replaceAll(defualtSingleQuotePlaceholder, "\'").replaceAll(defualtDoubleQuotePlaceholder, "\"");

  64. }

  65. return strs;


  66. }


  67. public String getDefualtSingleQuotePlaceholder()

  68. {

  69. return defualtSingleQuotePlaceholder;

  70. }


  71. public void setDefualtSingleQuotePlaceholder(String defualtSingleQuotePlaceholder)

  72. {

  73. this.defualtSingleQuotePlaceholder = defualtSingleQuotePlaceholder;

  74. }


  75. public String getDefualtDoubleQuotePlaceholder()

  76. {

  77. return defualtDoubleQuotePlaceholder;

  78. }


  79. public void setDefualtDoubleQuotePlaceholder(String defualtDoubleQuotePlaceholder)

  80. {

  81. this.defualtDoubleQuotePlaceholder = defualtDoubleQuotePlaceholder;

  82. }




  83. }

Util使用方法:

[java] view plain copy

  1. package reg;


  2. public class JsonQuotesUtilDemo

  3. {




  4. public static void main(String args[])

  5. {

  6. //獲取前臺傳入的參數

  7. 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";


  8. JsonQuotesUtil jsonQuotesUtil = new JsonQuotesUtil("s%0","d%1");

  9. System.out.println(jsonQuotesUtil.restoreSingleAndDoubleQuote(str));

  10. }



  11. }


json包含單雙引號問題解決方案