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

原创作品  转载请注明出处

最近项目中  遇到需要JSON传数据  但是某个字段 里面可能含有 双引号和单引号  导致出现错误

为了方便 写了一个工具类,比较好用。

支持“链式编程”

  分享给大家

360网盘下载地址:360安全云盘 - 404  访问密码 79f3

效果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"/> &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:

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

}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
是的,中文和英文的双引号不完全相同。在中文中,常用的引号有“”和‘’两种,分别表示双引号单引号。而在英文中,常用的引号有""和''两种,同样表示双引号单引号。 在 Java 中,如果要匹配中文或英文的双引号,需要根据具体情况来选择正则表达式。以下是一些示例代码,演示了如何匹配中英文的双引号: 1. 匹配中文双引号: ```java String str = "这是一段包含“中文”双引号字符串"; String regex = "“(.*?)”"; // 匹配中文双引号括起来的部分 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); while (matcher.find()) { String match = matcher.group(1); // 获取匹配的部分(不包含引号) System.out.println(match); // 输出:中文 } ``` 2. 匹配中文单引号: ```java String str = "这是一段包含‘中文’单引号字符串"; String regex = "‘(.*?)’"; // 匹配中文单引号括起来的部分 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); while (matcher.find()) { String match = matcher.group(1); // 获取匹配的部分(不包含引号) System.out.println(match); // 输出:中文 } ``` 3. 匹配英文双引号: ```java String str = "This is a 'quoted' string containing \"double\" and 'single' quotes"; String regex = "\"(.*?)\""; // 匹配英文双引号括起来的部分 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); while (matcher.find()) { String match = matcher.group(1); // 获取匹配的部分(不包含引号) System.out.println(match); // 输出:double } ``` 4. 匹配英文单引号: ```java String str = "This is a 'quoted' string containing \"double\" and 'single' quotes"; String regex = "'(.*?)'"; // 匹配英文单引号括起来的部分 Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(str); while (matcher.find()) { String match = matcher.group(1); // 获取匹配的部分(不包含引号) System.out.println(match); // 输出:single } ``` 注意,在匹配中文引号时,需要使用对应的中文引号字符(如“和’),而不是英文引号字符(如"和');在匹配英文引号时,则需要使用对应的英文引号字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明明如月学长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值