首先看一个简单的Json格式的数据:

{data:{id:1,text:"this is text",src:"abc/abc/abc.png"},success:true}

当使用Json数据向前端传递数据的时候,如果数据中出现引号的时候,如果不能转义,那么前台,就会获取一个错误的Json格式的数据,例如有这么一个对象Person:

class Person{

  private String name;

      private String desc;

      public String getName(){

            return name;
}
public void setName(String name){ this.name = name;
}
public String getDesc(){ return desc;
}
public void setDecs(String decs){ this.decs= decs;
}
}

如果有个Person对象person,他的desc是 he is Super Man,他的name是Jone

那么如果我们需要将这个对象转化为Json数据传递给前台,那么我们有很多种方法:

1,最灵活的方式,当然是拼接了:

StringBuffer buffer = new StringBuffer();

buffer.append("{data:{'name':'"person.getName()+"','desc':'"person.getDesc()+"'},success:true}");

return buffer.toString();

这样的话,前台拿到的数据就是{data:{'name':'Jone','desc':'he is Super Man'},success:true} 这个当然没问题;

但是如果在desc中出现引号,例如 he is 'Super Man',如果依旧采用上面这种方式,那么拼接出来的数据是这样子的:

{data:{'name':'Jone','desc':'he is 'Super Man''},success:true}  这样子的话,就不是标准的json格式的数据了,前台就不能正确的解析了。

PS,有人说,那大不了不用单引号,用双引号作为Json格式的拼接符,就可以了么?那如果数据中是双引号呢:{data:{"name":"Jone","desc":'he is "Super Man""},success:true}

甚至,如果在数据的末尾出现转义斜杠\怎么办!{data:{'name':'Jone\','desc':'he is \'Super Man\''},success:true}

这样的话,第一中方式就不适用了,那么可以看看下面这种:

2,使用序列化工具JSONSerializer,需要jar包:flexjson.jar

Person person = new Person();
person.setName("Jone");
person.setDesc(new StringBuffer().append("he is ").append('"').append("Super Man").append('"').toString());
JSONSerializer serializer = new JSONSerializer();
System.out.println(serializer.serialize(person));

这样的话,序列化之后的数据是这样的:

{"class":"test.Person","desc":"he is \"Super Man\"","name":"Jone"}

这样的数据,已经被转义过了,在前台就可以被正确的解析了。

但是这种方式灵活性比较差,

例如,如过前台需要的数据,除了desc,name两个字段之外,还有需要person.address或者,其他需要处理的数据,那么第二中方式也就不可以了,那么可以采用下面这种方式:

3,使用JSONObject对象,这个需要jar包:ezmorph.jar,json-lib.jar,xom.jar

方式为:

HashMap<String,Object> map = new HashMap<String,Object>();
map.put("name",person.getName());
map.put("decs",person.getDesc());
map.put("age",22);
map.put("home.address","street,road,china"); return JSONObject.fromObject(map).toString();

这样,结果为:{"home.address":"street,road,china","decs":"he is \"Super Man\"","name":"Jone","age":22},也是标准的数据。

使用最后这种方式,不仅使得json数据可以得到转义,而且,json数据内容处理更加灵活多样。

以上3中方法,视项目的大小而定,一般说来,功能比较多,数据库牵扯到外键的,或者数据内容多样化的,最好可以采取后面两种方式。

Json遇到引号需要转义的问题的更多相关文章

  1. js、html中的单引号、双引号及其转义使用

    js.html中的单引号.双引号及其转义使用在js中对相关字符做判断或取值的时候很多情况下都会用到这些. ------ 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下:<in ...

  2. 今天 运营同事发现的bug记录 上传商品时商品名称带双引号 导致输出页面时 双引号被转义

    例如  ”sk||““美白”淡化 这样输出表单页面时显示出来的只有sk||  解决办法 把输出文字对双引号进行转义

  3. shell中的引号和转义

    引号和转义 Bash 只有一种数据类型,就是字符串.不管用户输入什么数据,Bash 都视为字符串.因此,字符串相关的引号和转义,对 Bash 来说就非常重要. 转义 某些字符在 Bash 里面有特殊含 ...

  4. json的引号之伤

    最近读他们的jquery解读的源码,由于版本不同,我可能看的是他们解读的1.7的,但是我本身运行的可能是1.9的,所以有些出处,但是中心思想不变,我有疑问的时候,直接debug,让例子自己走一遍,好处 ...

  5. 关于js中单双引号以及转义符的理解

    关于js中单引号(')和双引号(")的使用以及转义的理解 这几天一直在画页面,身为开发人员的我之所以要画页面是因为当前项目中的页面上所有的东西都是从数据库中取得的,也就是动态的,类似于我们设 ...

  6. JavaScript 实现格式化字符串函数String.format (解决引号嵌套转义符问题)

    在js开发中,我们可能会遇到这样一个问题 当需要通过js动态插入html标签的时候 特别是当遇到大量的变量拼接.引号层层嵌套的情况,会出现转义字符问题,经常出错 我们来看个例子 <!DOCTYP ...

  7. sql server中sql语句中单引号怎么转义?【转】

    sql server有两个转义符: ' 默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第1个'就是转义符 另一个转义符是" 当SET QUOTED_IDEN ...

  8. 单引号、双引号 Html转义符 ----2014年12月2日

    &apos;----单引号 "-----双引号 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下: <input value="Test" ...

  9. curl -d中的json存在引号怎么处理?

    1\将其改写为I'\''m就可以执行 2\ curl -u elastic:mypass -X GET "localhost:9200/_analyze?pretty" -d 'a ...

随机推荐

  1. 在office 2010中插入Mathtype出现ctrl+v不能复制的问题

    加载项中去掉command for那个即可 详细网址:http://heblue.blog.163.com/blog/static/96325568201375102628405/

  2. ios UIWebView截获html并修改便签内容

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果: 方法:通过js截获UIWebView中的html,然后修改html标签内容: 实例代码: 服务器端 ...

  3. 10_Mybatis开发Dao方法——mapper代理实现

    [工程截图(几个关键的标红框)] [UserMapper.xml] <?xml version="1.0" encoding="UTF-8"?> & ...

  4. PDF.NET+EasyUI实现只更新修改的字段

    PDF.NET 在我看来是目前最简单易用而且高效的orm框架之一,感谢作者深蓝医生 实现的功能是easyui的行内编辑,用到了爱看书不识字的datagrid仿extjs的行内编辑 都是牛人啊. 201 ...

  5. ASP.NET的GET和POST方式的区别归纳总结

    表单提交中,ASP.NET的Get和Post方式的区别归纳如下 几点: 1. get是从服务器上获取数据,post是向服务器传送数据. 2.  get是把参数数据队列加到提交表单的ACTION属性所指 ...

  6. ubuntu 安装 桌面 awesome

    受了ubuntu 12.04自带的桌面,运行太卡了 http://www.linuxzen.com/awesometmuxgnomedoda-zao-gao-xiao-linuxzhuo-mian-h ...

  7. Java中静态代码块,代码块,构造方法的理解

    直接贴代码 class A { static { System.out.println("父类静态代码区"); } { System.out.println("父类代码区 ...

  8. 再看JavaScript线程

    继上篇讨论了一些关于JavaScript线程的知识,我们不妨回过头再看看,是不是JavaScript就不能多线程呢?看下面一段很简单的代码(演示用,没考虑兼容问题): 代码判断一: <div i ...

  9. php Static静态关键字

    静态属性与方法可以在不实例化类的情况下调用,直接使用类名::方法名的方式进行调用.静态属性不允许对象使用->操作符调用. class Car { private static $speed =  ...

  10. node.js操作mongoDB数据库

    链接数据库: var mongo=require("mongodb"); var host="localhost"; var port=mongo.Connec ...