Json遇到引号需要转义的问题

首先看一个简单的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中方法,视项目的大小而定,一般说来,功能比较多,数据库牵扯到外键的,或者数据内容多样化的,最好可以采取后面两种方式。

时间: 2024-10-06 17:38:53

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

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

js.html中的单引号.双引号及其转义使用在js中对相关字符做判断或取值的时候很多情况下都会用到这些. ------ 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下:<input value="Test" type="button" onclick="alert(""OK"");" />IE提示出错后,再漫不经心地改为:<input value="Test&

多命令顺序执行,单引号,双引号,反引号,转义符

多命令顺序执行 ; 多命令顺序执行 && 逻辑与 前命令执行ok,后面进行 || 逻辑或 前命令执行失败 后面执行 | 命令1|命令2 命令1结果,让命令来处理通配符 ?匹配任意一个字符 * 匹配0个或者多个任意字符 [] 匹配中括号中的任意一个字符 [-] 匹配括号中的任意一个字符 [^] 逻辑非 匹配不是中括号中的任意一个字符 [[email protected] biji]# aa=666 [[email protected] biji]# echo $aa #打印变量aa666[[

JSON 双引号

解析一个json数据: {"manifest":{ Version:"3.0"}} 仔细看的话,这个字符串不是正规的json格式,Version少了双引号,应该是: {"manifest":{ "Version": "3.0"}} 如果用 JSONObject mainfestObject.getJSONObject("manifest"); 这种方法解析就会报错,但是如果用 Strin

json的引号之伤

最近读他们的jquery解读的源码,由于版本不同,我可能看的是他们解读的1.7的,但是我本身运行的可能是1.9的,所以有些出处,但是中心思想不变,我有疑问的时候,直接debug,让例子自己走一遍,好处是一目了然,缺点就是有些分支走不到,近我的可能吧!能理解的理解,理解不了的实践:这个是目前我的基本思路: 这几天在解读$.data(),$("").data()方法,之后会单独拿出文章来写自己的心得体会,看源码->看一些前辈大神们的源码解读->自己实践->自己总结体会,扯

【未解决】struts2的json插件返回的json包含特殊字符被转义问题

例: {"pics":"http:\/\/localhost:8080\/data\/photos\/moodsPic\/4.jpg"} 想要"http://localhost:8080/data/photos/moodsPic/4.jpg这效果 换种方式: 转义后再返回http:\\/\\/localhost:8080\\/data\\/photos\\/moodsPic\\/4.jpg 结果变这样:http:\\\/\\\/localhost:8080

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

&apos;----单引号 "-----双引号 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下: <input value="Test" type="button" onclick="alert(""OK"");" /> IE提示出错后,再漫不经心地改为: <input value="Test" type="button&

python 单引号与双引号的转义

import simplejson a = """{"a":"\\""}""" b = """{"a":"\\'"}""" print simplejson.loads(a) print simplejson.loads(b) 输出: {'a': '"'} simplejson.error

rubymine自动转义双引号

如果你使用rubymine在编写JSON字符串的时候,然后要一个一个\去转义双引号的话,就实在太不应该了,又烦又容易出错.在rubymine可以使用Inject language帮我们自动转义双引号 先将焦点定位到双引号里面,使用alt+enter快捷键弹出inject language视图,并选中 Inject language or reference 点击  Inject language or reference 选择 json 选择完后.鼠标焦点自动会定位在双引号里面,这个时候你再次使

**PHP转义Json里的特殊字符的函数

http://www.banghui.org/11332.html 在给一个 App 做 API,从服务器端的 MySQL 取出数据,然后生成 JSON.数据中有个字段叫 content,里面保存了文章内容,含有大量 HTML 标签,这个字段在转 json 的时候需要转义,因为有大量的特殊字符会破坏 json 的结构. 比如这么一段 content: 'Lorem ipsum "dolor" sit amet, consectetur \ adipiscing elit.' 则必须要转