天天看點

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

最近項目中  遇到需要JSON傳資料  但是某個字段 裡面可能含有 雙引号和單引号  導緻出現錯誤

為了友善 寫了一個工具類,比較好用。

支援“鍊式程式設計”

分享給大家

360網盤下載下傳位址:http://yunpan.cn/cjCrRZj9uc8hE  通路密碼 79f3

效果DEMO:

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

JsonQuotesUtil.js

<b>[javascript]</b> view plain copy

/**

 * 解決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;

    //恢複預設單引号和雙引号占位符

     this.restoreDefaults = function()

         singleQuotePlaceholder=defualtSingleQuotePlaceholder;

         doubleQuotePlaceholder=defualtDoubleQuotePlaceholder;

        return this;

    //用單引号占位符替換單引号 并傳回替換後的字元串

     this.replaceSingleQuote=function (str)

         if(str instanceof  Array)//如果是數組分别替換

         {

             for(var i=0;i&lt;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);

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

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

         return str;

     this.replaceSingleAndDoubleQuote = function(str)

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

             alert("1");

                 alert(str[i]);

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

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

     //雙引号轉義

     this.escapeDoubleQuote = function(str)

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

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

 }

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("&amp;&amp;");//建立對象(同時自定義單雙引占位符)*/

        /* 使用方法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 reuslt =  new JsonQuotesUtil().escapeDoubleQuote(sourceStr);

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

    function arrayTest()//支援數組每個字元串的替換(沒有調用)

    {

        var sourceStr = new Array();

        sourceStr[0]="dfdfd'dfdf";

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

        alert("sourceStr"+sourceStr);

        alert( "after:"+reuslt);

    }

});

JsonQuotesUtil Demo.html

<b>[html]</b> view plain copy

&lt;!DOCTYPE html&gt;

&lt;html&gt;

&lt;head lang="en"&gt;

    &lt;meta charset="UTF-8"&gt;

    &lt;title&gt;JsonQuotesUtil Demo&lt;/title&gt;

    &lt;script type="text/javascript" src="libs/js/jquery.js"&gt;&lt;/script&gt;

    &lt;script type="text/javascript" src="libs/js/JsonQuotesUtil.js"&gt;&lt;/script&gt;

    &lt;script type="text/javascript" src="libs/js/demo.js"&gt;&lt;/script&gt;

&lt;/head&gt;

    請輸入帶有單雙引号的字元串:&lt;br/&gt;

          &lt;textarea rows="10" cols="65" id="sourceStr"&gt;This is a simple solution for SingleQuote( ') and DoubleQuote(") in json &lt;/textarea&gt;

&lt;br/&gt;&lt;br/&gt;

     單引号占位符:&lt;input id="single" type="text" placeholder="s%0"/&gt; &amp;nbsp; 雙引号占位符:&lt;input id="double" type="text" placeholder="d%1"/&gt;

&lt;br/&gt; &lt;br/&gt;

          &lt;input type="button" id="show" value="替換單雙引号"&gt;&amp;nbsp;&lt;input type="button" id="escape" value="轉義雙引号"&gt;

         &lt;br/&gt;

        &lt;span id="replaceResult"&gt;&lt;/span&gt;

&lt;/form&gt;

&lt;/body&gt;

&lt;/html&gt;

背景解析Util:

<b>[java]</b> view plain copy

package reg;

 * 将 單雙引号用不容易在字元串中出現的字元分别替換

 * 在背景 分别用過單雙引号替換掉即可

public class JsonQuotesUtil

{

    private  String defualtSingleQuotePlaceholder="s%0";//預設單引号占位符

    private   String defualtDoubleQuotePlaceholder="d%1";//預設雙引号占位符

    public JsonQuotesUtil()

        super();

    public JsonQuotesUtil(String defualtSingleQuotePlaceholder,

            String defualtDoubleQuotePlaceholder)

        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&lt;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)

    //恢複單雙引号

    public   String restoreSingleAndDoubleQuote(String str)

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

    public   String[] restoreSingleAndDoubleQuote(String[] strs)//恢複單雙引号(數組)

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

    public String getDefualtSingleQuotePlaceholder()

        return defualtSingleQuotePlaceholder;

    public void setDefualtSingleQuotePlaceholder(String defualtSingleQuotePlaceholder)

    public String getDefualtDoubleQuotePlaceholder()

        return defualtDoubleQuotePlaceholder;

    public void setDefualtDoubleQuotePlaceholder(String defualtDoubleQuotePlaceholder)

}

Util使用方法:

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));

繼續閱讀