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"
});
});
})