最近項目中 遇到需要JSON傳資料 但是某個字段 裡面可能含有 雙引号和單引号 導緻出現錯誤
為了友善 寫了一個工具類,比較好用。
支援“鍊式程式設計”
分享給大家
360網盤下載下傳位址:http://yunpan.cn/cjCrRZj9uc8hE 通路密碼 79f3
效果DEMO:

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<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("&&");//建立對象(同時自定義單雙引占位符)*/
/* 使用方法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
<!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"/> &nbsp; 雙引号占位符:<input id="double" type="text" placeholder="d%1"/>
<br/> <br/>
<input type="button" id="show" value="替換單雙引号">&nbsp;<input type="button" id="escape" value="轉義雙引号">
<br/>
<span id="replaceResult"></span>
</form>
</body>
</html>
背景解析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<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));