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
用ajax以json形式提交一个对象
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 map = new HashMap();
map.put("name", "小红");
map.put("name", "小花");
map.put("name", "小草");
map.put("age", 11);
JSONObject json2 = JSONObject.fromObject(map);
/*
* 构建json第三式,传入List
* */
List list = new ArrayList();
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 users = new ArrayList();
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前台接受数据并处理
获得多个对象
完毕。后续有拓展再写。