首先看一个简单的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. CentOS 7 安装 Apache PHP MariaDB

    准备篇: 一.配置防火墙,开启80端口.3306端口 CentOS 7 默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl sto ...

  2. IIS原理学习

    IIS 原理学习 首先声明以下内容是我在网上搜索后整理的,在此只是进行记录,以备往后查阅只用. IIS 5.x介绍 IIS 5.x一个显著的特征就是Web Server和真正的ASP.NET Appl ...

  3. 从追MM谈Java的23种设计模式

    从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...

  4. 犯这个错误的肯定不止我一个 关于File

    File.Create(string filePath)这种用法所有人都知道,这两天用到的时候却发现一个问题. 需要先判断文件是否存在,如果不存在则创建文件,然后向该文件写入数据,后续定时Append ...

  5. TDirectory.IsRelativePath是否相对路径

    使用函数: System.IOUtils.TDirectory.IsRelativePath class function IsRelativePath(const Path: string): Bo ...

  6. JFreeChart入学教程

    JFreeChart入学教程 2011-08-08 14:55:19|  分类: 技术篇 |举报 |字号 订阅   JFreeChart 是一组功能强大.灵活易用的Java绘图API,使用它可以生成多 ...

  7. Git中的fetch和pull

    http://blog.haohtml.com/archives/12674 Git中从远程的分支获取最新的版本到本地有这样2个命令: 1. git fetch:相当于是从远程获取最新版本到本地,不会 ...

  8. 简单vim配置

    对于一个学习C++的人来说,我常用VS写代码,而Linux环境也是很重要的.最近学习了Linux的一些基本内容后,开始了vim编辑器的使用.然而它刚开始的界面着实令人很不习惯~~~于是我尝试着把它装饰 ...

  9. ios 网络字节顺序的转换HTOS

    最近用socket发送data遇到个问题,字节高地位和服务器不匹配,搞了好久才找到解决的方案,主要用到两个函数HTOL HTOS STOH LTOL 故写此博文 什么是字节序 采用维基百科的解释如下: ...

  10. ios:如何将自己编写的软件放到真正的iPhone上运行(转)

    想要将自己编写的软件放到真正的iPhone上去运行,首先你需要成为Apple Developer计划的成员.其次,你需要设置程序ID和认证书,在这之后你就可以在你指定的iPhone上运行你的程序了.下 ...