1. 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字符串
后台三种json:
2.1 JavaBean/Map
{}
2.2 数组/List/Set
[]
2.3 类里嵌类
混合模式
//json对象模式
Student stu1=new Student("s001", "张三");
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(stu1));
//json数组模式
Student stu2=new Student("s002", "李四");
List<Student> list1=new ArrayList<>();
list1.add(stu1);
list1.add(stu2);
System.out.println(om.writeValueAsString(list1));
//json混合模式
Map<String , Object> map=new HashMap<>();
map.put("count", 5);
map.put("stu1", stu1);
map.put("stu2", stu2);
System.out.println(om.writeValueAsString(map));
map集合与JavaBean转json字符串有什么区别:
结论:map集合与JavaBean转json字符串是一样的。
Map<String, Object> map1=new HashMap<>();
map1.put("sid", "s001");
map1.put("sname", "张三");
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(map1));
Map<String, Object> map2=new HashMap<>();
map2.put("sid", "s001");
map2.put("sname", "张三");
List<Map<String, Object>> list=new ArrayList<>();
list.add(map1);
list.add(map2);
System.out.println(om.writeValueAsString(list));
3. javaBean转json字符串死循环问题:java.lang.StackOverflowError(堆栈溢出错误)
处理方法:
1.忽略双向关联的一个方向即可,由双向关联改为单向关联
2.实体类加 @JsonIgnore(程序控制)
Student stu1=new Student("s001", "张三");
Student stu2=new Student("s002", "李四");
Teacher tea1=new Teacher("t001", "晓哥", null);
Teacher tea2=new Teacher("t002", "袁哥", null);
Set<Teacher> tea=new HashSet<>();
tea.add(tea1);
tea.add(tea2);
stu1.setTeacher(tea);
Set<Student> stu=new HashSet<>();
stu.add(stu1);
stu.add(stu2);
tea1.setStudent(stu);
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(tea1));
4.Ajax地址三级联动
package com.zking.dao;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.zking.util.JsonBeanDao;
import com.zking.util.JsonUtils;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
public class RegionDao extends JsonBeanDao{
/**
* Ajax 地址三级联动
* @param paramMap
* @param pageBean 通用分页
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws SQLException
*/
public List<Map<String , Object>> list(Map<String , String[]> paramMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
String id = JsonUtils.getParanVal(paramMap, "ID");
String sql = "select * from ch_region where true ";
//如果id为空就给它一个默认值,反之不为空就用就jsp页面传来的id
if(StringUtils.isBlank(id)) {
sql += " and parent_id=7459";
}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 10948
*
*/
public class JsonUtils {
/**
* 从paramMap拿到所需要用到的查询维度,用于sql语句拼接
* @param paramMap 获取从jsp页面传递到后台的参数集合
* @param key
* @return
*/
public static String getParanVal(Map<String , String []> paramMap,String key) {
if(paramMap !=null && paramMap.size()>0) {
String[] vals = paramMap.get(key);
if(vals!=null && vals.length>0) {
//将String数组转换成String字符串
String val = Arrays.toString(vals);
return val.substring(1, val.length()-1);
}
return "";
}
return "";
}
}
jQuery.Ajax js
$(function() {
var ctx=$("#ctx").val();
$.ajax({
url:ctx+"/regionServlet",
success:function(data){
for(index in data){
$("#province").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
$("#province").change(function(){
$("option:gt(0)","#city").remove();
$("option:gt(0)","#county").remove();
$.ajax({
url:ctx+"/regionServlet?ID="+this.value,
success:function(data){
for(index in data){
$("#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").append("<option value='"+data[index].ID+"'>"+data[index].REGION_NAME+"</option>")
}
},
dataType:"json"
});
});
})