- jackson
Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象
和xml文档,同样也可以将json、xml转换成Java对象
核心代码:
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(obj);
int count = md.getColumnCount();
map.put(md.getColumnName(i), rs.getObject(i));
2. jackson将java–>json
2.1 JavaBean/Map
//json对象
Student stu1 = new Student("s001","zhangsan");
ObjectMapper om = new ObjectMapper();
try {
System.out.println(om.writeValueAsString(stu1));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
输出:{"sid":"s001","sname":"zhangsan","teas":[]}
2.2 数组/List/Set
//json数组
Student stu2 = new Student("s002","lisi");
List<Student> list1 = new ArrayList<>();
list1.add(stu1);
list1.add(stu2);
try {
System.out.println(om.writeValueAsString(list1));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
输出:[{"sid":"s001","sname":"zhangsan","teas":[]},{"sid":"s002","sname":"lisi","teas":[]}]
2.3 类里嵌类
//json混合模式
Map<String, Object> map = new HashMap<>();
map.put("total", 2);
map.put("stus", list1);
try {
System.out.println(om.writeValueAsString(map));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
输出:{"total":2,"stus":[{"sid":"s001","sname":"zhangsan","teas":[]},{"sid":"s002","sname":"lisi","teas":[]}]}
map集合与JavaBean转json字符串有什么区别?
输出:
结论: javaBean与Map集合换成json字符串格式是一样的。
3.javaBean转json字符串死循环问题:java.lang.StackOverflowError(堆栈溢出错误)
忽略双向关联的一个方向即可
@JsonIgnore/程序控制
4.Ajax地址三级联动
先写一个通用查询
package com.zking.util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonBaseDao extends BaseDao<Map<String, Object>> {
/*
* 1、创建一个实体类的实例
* 2、给创建的实例属性赋值
* 3、将添加完类容的实体类添加到list集合中
*/
public List<Map<String, Object>> executeQuery(String sql, PageBean pageBean)
throws SQLException, InstantiationException, IllegalAccessException {
return super.executeQuery(sql, pageBean, new Callback<Map<String, Object>>() {
@Override
public List<Map<String, Object>> foreach(ResultSet rs) throws SQLException, InstantiationException, IllegalAccessException {
List<Map<String, Object>> list = new ArrayList<>();
ResultSetMetaData md = rs.getMetaData();
int count = md.getColumnCount();
Map<String, Object> map = null;
while(rs.next()) {
map = new HashMap<>();
for (int i = 1; i <= count; i++) {
map.put(md.getColumnName(i), rs.getObject(i));
}
list.add(map);
}
return list;
}
});
}
}
查询方法
public List<Map<String, Object>> list(Map<String, String[]> paramMap, PageBean pageBean)
throws InstantiationException, IllegalAccessException, SQLException {
String id = JsonUtils.getParamVal(paramMap, "ID");
String sql = "select * from ch_region where true";
// 如果id为空就给它一个默认值,反之不为空就用就jsp页面传来的id
if (StringUtils.isBlank(id)) {
sql += " and parent_id=9504";
} else {
sql += " and parent_id=" + id;
}
return super.executeQuery(sql, pageBean);
}
处理json数据工具包
数组转化成String字符串
package com.zking.util;
import java.util.Arrays;
import java.util.Map;
/**
* 专门用来处理json数据的工具包
* @author zx413
*
*/
public class JsonUtils {
/**
* 从paramMap拿到我们所需要用到查询维度,用于sql语句拼接
* 获取从jsp页面传递到后台的参数集合(req.getparamMap)
* @param paramMap
* @param key
* @return
*/
public static String getParamVal(Map<String, String[]> paramMap,String key) {
if (paramMap != null && paramMap.size()>0) {
String[] vals = paramMap.get(key);
if (vals != null && vals.length > 0) {
String val = Arrays.toString(vals);
return val.substring(1, val.length()-1);
}
return "";
}
return "";
}
}
js插件
$(function(){
var ctx = $("#ctx").val();
$.ajax({
url:ctx+"/regionServlet",
success:function(data){
for(index in data) {
console.log(data[index]);
//province为下拉框id
$("#province").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
$("#province").change(function(){
$("option:gt(0)","#city").remove();
$.ajax({
url:ctx+"/regionServlet?ID="+this.value,
success:function(data){
for(index in data) {
//city为下拉框id
$("#city").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
});
$("#city").change(function(){
$("option:gt(0)","#county").remove();
$.ajax({
url:ctx+"/regionServlet?ID="+this.value,
success:function(data){
for(index in data){
//county为下拉框id
$("#county").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
});
})
效果: