首先看一个简单的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. Failed to create a 'System.Type' from the text ' ' in wpf(无法从文本创建类型)

    问题描述:WPF is unable to create a type for data templateWPF使用mvvm模式无法加载DataTemplate模板定义的资源,提示无法从文本创建类型错 ...

  2. 将Cell中的视图取出传递到根视图

    当我们点击Cell中的某个图片时,图片会有一种从Cell中取出,放大,然后再回到原来的Cell中的效果.我的想法是:当Cell中的图片用button 来显示.当我们点击Cell中的这个button的时 ...

  3. Java的云打印Lodop

        打印某一个网页上的内容我们都经常遇到过,比如网上申请港澳通行证时需要填写申请表,然后把申请表给打印出来.像这样的打印技术是怎么实现?这种打印可以通过一种叫云打印的插件来做,按我的理解云打印的技 ...

  4. 第3章 Struts2框架--1、Struts2环境搭建

    第3章 Struts2框架--1.Struts2环境搭建 搭建步骤: 1.从下载http://struts.apache.org 没找到Struts2.3.16版,就下载了2.3.29 2.拷贝后解压 ...

  5. [002] The Perks of Being a Wallflower - 读后记

    The Perks of Being a Wallflower 今天(2015年10月30日 18:26:17)读完"The Perks of Being a Wallflower" ...

  6. Dynamic Programming: From novice to advanced

    作者:Dumitru 出处:http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=dynProg An impo ...

  7. Spring框架的初步学习

    (1) IOC 控制反转 所谓的控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建及维护是由 外部容器负责的(spring是外部容器之一).这样控制权就由应用转移到了外部容器,控制权 的转 ...

  8. HA高可用配置

    HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务. 下 ...

  9. 《JavaScript高级程序设计》笔记(1):<script>元素

    使用<script>元素内部的JavaScript代码将从上至下依此解释.在使用<script>嵌入的JavasCript代码时,代码任何地方不能出现"</sc ...

  10. grunt-mac上安装运行构建工具的总结(一)

    安装node.js brew install node.js 安装grunt npm install -g grunt-cli 1.新建package.json,配置 { "name&quo ...