json是一种数据格式,在http协议中使用json数据格式非常常见,其他的数据格式比如xml格式,xml应用更为广泛了,堪称web的世界语言。
json和xml对比起来就是可读性差,但是在js领域有绝对优势,xml呢又应用多年更为广泛。
本章使用json-lib进行解析,下边就根据代码讲解json传输数据的实际使用。代码中已经写了详细注释,就不在多解释代码了。
首先需要用到的jar包和依赖
json-lib的核心jar包有:
json-lib.jar
json-lib的依赖jar包有:
commons-lang.jar
commons-beanutils.jar
commons-logging.jar
commons-collections.jar
ezmorph.jar
这里有jar包资源 https://pan.baidu.com/s/1uRmFYTYWlwivI-I3sT-vrw
1、
1.1、从前台获取数据提交到servlet
<!DOCTYPE html>
<html>
<head>
<title>用ajax以json形式提交一个对象</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<style type="text/css"></style>
<!-- 导入jquery -->
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<!-- 静态部分 -->
<form>
id:<input id="id" type="text" name="id"/><br>
名字:<input id="name" type="text" name="name"/><br>
身高:<input id="hei" type="text" name="height"/><br>
<input id="send" type="button" value="提交"/>
</form>
<!-- script部分 -->
<script>
$(function() {
$("#send").click(function() {
/*
1,获取json对象
*/
var id = $("#id").val();
var name = $("#name").val();
var height = $("#hei").val();
var user = {"id":id,"name":name,"height":height};
/*
2,获取路径
*/
var url = "submitServlet";
$.post(
url,
/*
3,JSON.stringify(user)函数的作用是将一个javascript对象,转换为JSON格式的字符串。
*/
{"data":JSON.stringify(user)},
function(data) {
alert("在tomcat后台查看数据");
}
);
});
});
</script>
</body>
</html>
1.2、对应的servlet接收数据
package servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.User;
import net.sf.json.JSONObject;
public class SubmitServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 1得到提交的字符串形式的数据
* */
String data = request.getParameter("data");
/*
* 2把数据转化为json对象
* 使用JSONObject.fromObject方法将字符串形式转化为json对象
* 这个方法还可以将map、list、Object,多种形式转化为json对象
* */
JSONObject json = JSONObject.fromObject(data);
/*
* 3把json对象转化为user对象
* JSONObject.toBean方法
* */
User user = (User) JSONObject.toBean(json,User.class);
System.out.println("转换为User对象:"+user);
}
}
2、
2.1将对象数据解析然后发送到前台
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import bean.User;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
public class GetOneServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
User user = new User();
user.setId(25);
user.setName("盖伦");
user.setHeight(1.77f);
/*
* 得到JSONObject对象
* JSONObject对象的有个爸爸叫Map,Map的数据存储格式就明晰了
* */
JSONObject json1 = new JSONObject();
/* 构建json第一式,直接put参数进去即可
* JSONObject的put方法,put(key,value);
* key必须是字符串形式,value可以是对象、数组、字符串、各种基本类型都可以
* JSONObject.fromObject()方法可以填入参数 字符串、对象/数组/Map/List等等转化为json对象
* */
json1.put("user",JSONObject.fromObject(user));
/*
* 构建json第二式,传入Map
* */
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "小红");
map.put("name", "小花");
map.put("name", "小草");
map.put("age", 11);
JSONObject json2 = JSONObject.fromObject(map);
/*
* 构建json第三式,传入List
* */
List<User> list = new ArrayList<User>();
User user1 = new User(1,"爱华",1.8f);
User user2 = new User(2,"爱华",1.9f);
User user3 = new User(3,"爱华",1.7f);
list.add(user1);
list.add(user2);
list.add(user3);
JSONObject json3 = JSONObject.fromObject(list);
/*
* 构建json四,传入对象
* */
JSONObject json4 = JSONObject.fromObject(user1);
/*
* 构建json五,集合(JSONSerializer.toJSON)
* */
List<User> users = new ArrayList<User>();
for (int i = 0; i < 20; i++) {
users.add(new User(i,"name"+i,1.75f));
}
String json5 = JSONSerializer.toJSON(users).toString();
/*
* 构建json六,使用JSONArray传入集合
* */
JSONArray json6 = new JSONArray();
for (int i = 0; i < 20; i++) {
json6.add(new User(i,"name"+i,1.75f));
}
//response.getWriter().print(json);
}
}
2.2前台接受数据并处理
<!DOCTYPE html>
<html>
<head>
<title>获得多个对象</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
<style type="text/css"></style>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<input id="btn" type="button" value="获得多个对象"/><br>
<div id="dv"></div>
<script type="text/javascript">
$(function() {
$("#btn").click(function() {
var url = "getManyServlet";
$.post(
url,
function(data) {
/*
处理data数据字符串
如果来的数据是集合的话就获得json数组
具体看数据是怎样的来解析数据此处不做赘述
$.parseJSON和JSON.parse(data)功能一样,eval()也可实现从字符串到json对象的转化
*/
var users = $.parseJSON(data);
for(i in users){
var old = $("#dv").html();
var user = users[i];
$("#dv").html(old+"<br>"+user.id+":"+user.name+":"+user.height);
}
}
);
});
});
</script>
</body>
</html>
完毕。后续有拓展再写。