最近在寫后台向前台easyUI頁面發送數據時遇到的一些報錯。
首先easyUI內部封裝了許多的方法和對象,以至於很多參數都不清楚,需要查詢,其次easyUI也是有內置ajax所以從后台響應回來的數據一般是json格式。
這樣就會遇到一些問題,json格式該怎么處理?json里的數據是什么類型的?下面一一說明。
1,首先一般我們會使用jdbc工具類這樣返回的是一個
ResultSet結果集,以前不清楚,現在親測可用直接將結果集轉為list集合並且直接封裝到jsonarray中。
同樣為了前台需求,我們需要給json數據處理成正確的格式,其中就包括日期格式必須轉換為String類型,下面提供一個工具類
public static JSONArray formatRsToJsonArray(ResultSet rs)throws Exception{ ResultSetMetaData md=rs.getMetaData(); int num=md.getColumnCount(); // 得到列數 JSONArray array=new JSONArray(); while(rs.next()){ JSONObject mapOfColValues=new JSONObject(); for(int i=1;i<=num;i++){ Object o=rs.getObject(i); if(o instanceof Date){ mapOfColValues.put(md.getColumnName(i), DateUtil.formatDate((Date)o, "yyyy-MM-dd")); }else{ mapOfColValues.put(md.getColumnName(i), rs.getObject(i)); } } array.add(mapOfColValues); } return array; }
此類只需將ResultSet傳入便會自動轉換每一列,並返回jsonarray
2.我自己常用的第三方工具類dbutil會直接返回集合,然后直接放入jsonarray即可。但如果數據里沒有日期還好,有日期就很難處理。最后糾結半天,還是用一個工具類解決最方便。
public static JSONArray formatRsToJsonArray(List list)throws Exception{ //轉換學生數據格式的jsonutil類,注意數據格式是寫死的 需要自己定義 JSONArray array=new JSONArray(); Iterator it = list.iterator(); while (it.hasNext()){ Student next = (Student) it.next(); JSONObject mapOfColValues=new JSONObject(); if(next.getBorndate() instanceof Date){ mapOfColValues.put("borndate", DateUtil.formatDate(next.getBorndate(), "yyyy-MM-dd")); } mapOfColValues.put("suid",next.getSuid() ); mapOfColValues.put("sid",next.getSid()); mapOfColValues.put("uname",next.getUname()); mapOfColValues.put("sex",next.getSex()); mapOfColValues.put("email",next.getEmail() ); mapOfColValues.put("ps", next.getPs()); mapOfColValues.put("classname",next.getClassname()); array.add(mapOfColValues); } return array; }
JSONArray jsonArray=null; try { jsonArray = MyjsonUtil.formatRsToJsonArray(pageBean.getList()); } catch (Exception e) { e.printStackTrace(); } jo.put("rows",jsonArray); ResponseUtil.write(jo,resp);
注意我的工具類是自己寫的 不具有通用性,需要自己更改數據。如果有好的方法,還請大佬指點一下。