上一讲为大家讲了什么是JSON,那么这一讲为大家带来了在WEB项目中JSON的用法,也就是JSON的封装与解析。

此图是数据库中的部分内容
一、JSON封装
所谓的JSON封装,指的是在Servlet中将从数据库得到的数据转化成JSON格式的字符串。
那么什么是JSON格式的字符串?
- JSON格式的字符串就是指字符串的内容要完全符合JSON数据的格式

这个就是在servlet中输出的已经封装好的JSON格式字符串,在控制台输出的效果。
如何封装
- 在我自己的WEB中,原本想用原生态的JSON去封装,但是项目经理给我介绍了GSON,所以我是用GSON去封装的
代码(servlet)
/***
* 通过id来检索申诉信息并传到页面AJAX调用
* admin
* @return
*/
public String getListAppeal(HttpServletRequest request, HttpServletResponse response){
String id = request.getParameter("appeal_id");
try {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Gson gson = new Gson();
System.out.println("我是JSON格式字符串:"+gson.toJson(appealService.getListAppeal(id)));
out.print(gson.toJson(appealService.getListAppeal(id)));
out.close();
} catch (IOException e) {
e.printStackTrace();
}
return null;//null代表AJAX调用
}appealService.getListAppeal(id)appealService是service层的实现类,主要去调用DAO进行JBDC
getListAppeal(id) 如下图

gson.toJson()
后面的参数是Object ,那么参数就可以是list,map,bean(自定义类)等。用这个方法会返回JSON封装的字符串

二、解析
JSON解析指JSP页面接收到由Servlet发送的JSON字符串,转化为JSON对象的过程。
- 在解析中我们需要使用到eval()这个方法
代码:
$.ajax({
url:"appeal.do",
data:{"method":"getListAppeal","appeal_id":id},
datatype:"json",
type:"POST",
success: function(result){//result-->接收servlet层返回的参数
console.log("未处理==="+result);
var json = eval(result);/* JSON解析 */
console.log("已处理==="+json);
//获取JSON数据中的值
$("#id").val(json[0].appeal_id);
$("#userAccount").val(json[0].user_account);
$("#type").val(json[0].appeal_type);
$("#content").val(json[0].appeal_content);
$("#time").val(json[0].appeal_time);
}
});结果:

值得提醒的一点是,在调用gson.toJson()方式,如果参数是MAP可能会出现一些问题,就是在解析过程中,按照上面的步骤不能转化为JSON对象哦。
代码:
$.ajax({
url:"orderServlet.do?method=getMapOrderNumByGame",
datatype:"JSON",
type:"POST",
async: false,
success:function(result){
/* alert(eval(result)) */
console.log("未处理==》"+result);
console.log("处理一次===》"+eval(result));
var json = eval(eval(result));
console.log("处理两次===》"+json);
option.series[0].data = json
var s="";
for ( var j in json) {
s+=","+json[j].name
}
s=s.substr(1);
option.legend.data=s.split(",");
myChart.setOption(option);
}
});结果:

可以看出,在未处理json字符串的时候,该字符串有存在转义字符的,在处理一次后,就和上面的步骤一样了,所以在这里要进行两次解析。
















