第一种:手动拼接
第一步:确认JSON格式
[
{"name":"张三","sex":"男","age":17},
{"name":"李四","sex":"男","age":18},
{"name":"王五","sex":"男","age":19}
]
需要注意的是,最后一个对象是没有逗号的
第二步:创建JavaBean对象,定义JSON输出方法
public class User {
private int id; //用户ID
private String name; //姓名
private int sex; //性别
private int age; //年龄
private long phone; //手机号码
private int qq; //QQ
private String email; //邮箱
public String JSONStr(){
return "{\"id\":\""+id+"\",\"name\":\""+name+"\",\"sex\":\""+sex+"\",\"age\":\""+age+"\",\"phone\":\""+phone+"\",\"qq\":\""+qq+"\",\"email\":\""+email+"\"},";
}
//省略 Get 和 Set 方法
}
需要注意的是,注意使用符号 " \ " 对双冒号( " )进行转义
第三步:Dao继承类在返回JSON格式的字符串
//省略连接数获取数据的步骤
String JSONStr=""; //一定要初始化JSONStr为空字符串,否则会将undefined插入进去
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setSex(rs.getInt("sex"));
user.setAge(rs.getInt("age"));
user.setPhone(rs.getLong("phone"));
user.setQq(rs.getInt("qq"));
user.setEmail(rs.getString("email"));
JSONStr += user.JSONStr();
}
//【重点步骤】获取拼接字符最后一个逗号所在的索引,然后截取该逗号之前的所有字符串
int index = JSONStr.lastIndexOf(",");
return JSONStr.substring(0, index);
第四步:Servlet业务类
//1、获取Dao接口对象
UserDaoImpl udi = new UserDaoImpl();
//2、调用上面第三步的方法,返回JSON字符串,进行最后的拼接
String JSONStr = "[" + udi.showStr(pageNow) + "]";
response.getWriter().append(JSONStr);
第五步:Ajax获取JSON字符串,并通过JSON.parse()方法进行格式化
var jsonStr = xhr.responseText; //接受返回的Json字符数据
var jsonDate = JSON.parse(jsonStr);//对Json数据进行解析
var jsonHtml=""; //拼接HTML字符串
for (var i in jsonDate){
jsonHtml+="<tr><td>"+jsonDate[i].id+"</td><td>"+jsonDate[i].name+"</td><td>"+jsonDate[i].sex+"</td><td>"+jsonDate[i].age+"</td><td>"+jsonDate[i].phone+"</td><td>"+jsonDate[i].qq+"</td><td>"+jsonDate[i].email+"</td></tr>"
}
document.getElementsByClassName("tdCont")[0].innerHTML = jsonHtml;
最终效果
第二种:使用Gson软件包
步骤和前面的一样,只不过需要将Gson软件包(jar包)引入到/WEB-INF/lib文件夹中
List<User> list = new ArrayList<User>();
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setSex(rs.getInt("sex"));
user.setAge(rs.getInt("age"));
user.setPhone(rs.getLong("phone"));
user.setQq(rs.getInt("qq"));
user.setEmail(rs.getString("email"));
list.add(user);
}
return list;
Servlet业务类只需要获取Dao继承类所返回的User集合对象,然后调用
//1、获取Dao接口对象
UserDaoImpl udi = new UserDaoImpl();
//2、将返回的User集合直接传进toJson的格式化方法中
String JSONStr= gson.toJson(udi.showStr(pageNow));
response.getWriter().append(result);
//3、响应结果
response.getWriter().println(JSONStr);
String result = gson.toJson(list); response.getWriter().append(result);
第三种:使用json-lib-2.4-jdk软件包
和第一步也差不多,只是Dao继承类返回的不再是字符串而是User集合对象
List<User> list = new ArrayList<User>();
while(rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setSex(rs.getInt("sex"));
user.setAge(rs.getInt("age"));
user.setPhone(rs.getLong("phone"));
user.setQq(rs.getInt("qq"));
user.setEmail(rs.getString("email"));
list.add(user);
}
return list;
Servlet业务类只需要获取Dao继承类所返回的User集合对象,然后调用
//1、获取Dao接口对象
UserDaoImpl udi = new UserDaoImpl();
//2、将返回的User集合直接传进JSONArray的格式化方法中
JSONArray jsonArray = JSONArray.fromObject(udi.showStr(pageNow));
//3、响应结果
response.getWriter().println(jsonArray);