javabean转换为json字符串

紫蜜蜂 2013-10-29 07:42:46
假如有个javabean:
public class Home {
private String service_name;
private String type_name;
private String author_name;
private String content_desc;
private String img_url;
private String wap_url;
private Date create_time;
//省略get、set

}

其中的如期类型是java.sql.Date,可能有人会说将javabean中的日期定义成java.util.date类型,在生成javabean时将resultSet中的sql类型转换为java.util.date类型就行了,如果说数据少这样做没有问题。
现在我写了这么个工具类,作用是将resultset中的数据解析生成一个list,而忽略具体类型,经过测试该方法可行:
public List<E> getList(ResultSet rs,Class e){
List<E> list = new ArrayList<E>();
try {
while(rs.next()){
E obj =(E) e.newInstance();
Field[] field = obj.getClass().getDeclaredFields();
//将属性按照字母顺序排序
int length = field.length;
//1、将对象属性包装成map
Map<String, Field> map = new HashMap<String, Field>();
for(int i = 0;i<length;i++){
map.put(field[i].getName(), field[i]);
}
//2、对属性值进行排序
String [] a = new String[length];
for(int i = 0;i<length;i++){
a[i]=field[i].getName();
}
Arrays.sort(a);
//3、对对象数组进行排序
for(int i = 0;i<length;i++){
field[i] = map.get(a[i]);
}
//将列名按照字母顺序排序
int columnCount =rs.getMetaData().getColumnCount();
String[] rsName = new String[columnCount];
for(int i = 0;i<columnCount;i++){
rsName[i] = rs.getMetaData().getColumnName(i+1);
}
Arrays.sort(rsName);
for(int i = 0;i<field.length;i++){
field[i].setAccessible(true);
field[i].set(obj, rs.getObject(rsName[i]));
}
list.add(obj);
}
} catch (SecurityException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return list;
}
于是json = JSONObject.fromObject(readlist.get(i))异常了,有什么办法让json能够直接处理java.sql.date的数据吗?求解答
...全文
379 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
别闹腰不好 2013-10-30
  • 打赏
  • 举报
回复
引用 3 楼 u012463264 的回复:
import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonUtils { public static String encodeList(Object[] objs) { return encodeList(Arrays.asList(objs)); } @SuppressWarnings("unchecked") public static String encodeList(Collection objs) { JSONArray list = new JSONArray(); if (objs == null || objs.size() == 0) return list.toString(); for (Object ae : objs) { list.add(ae); } return list.toString(); } @SuppressWarnings("unchecked") public static String encodeObject(Object obj){ if(obj instanceof Collection) return encodeList((Collection)obj); JSONObject jo = JSONObject.fromObject(obj); return jo.toString(); } @SuppressWarnings("unchecked") public static <T>List<T> decodeList(String str, Class<T> clazz) { if (str == null || "".equals(str)) return null; JSONArray obj = JSONArray.fromObject(str); Object[] rts = obj.toArray(); List<T> result = new ArrayList<T>(rts.length); for (int i = 0; i < rts.length; i++) { Object jo = rts[i]; T ele = (T)JSONObject.toBean((JSONObject) jo, clazz); result.add( ele ); } return result; } @SuppressWarnings("unchecked") public static <T>T decodeObject(String json,Class<T> clz){ JSONObject jsonObject = JSONObject.fromObject(json); T bean = (T) JSONObject.toBean(jsonObject, clz); return bean; } }
就这个个人感觉,什么json都能解决
别闹腰不好 2013-10-30
  • 打赏
  • 举报
回复
import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class JsonUtils { public static String encodeList(Object[] objs) { return encodeList(Arrays.asList(objs)); } @SuppressWarnings("unchecked") public static String encodeList(Collection objs) { JSONArray list = new JSONArray(); if (objs == null || objs.size() == 0) return list.toString(); for (Object ae : objs) { list.add(ae); } return list.toString(); } @SuppressWarnings("unchecked") public static String encodeObject(Object obj){ if(obj instanceof Collection) return encodeList((Collection)obj); JSONObject jo = JSONObject.fromObject(obj); return jo.toString(); } @SuppressWarnings("unchecked") public static <T>List<T> decodeList(String str, Class<T> clazz) { if (str == null || "".equals(str)) return null; JSONArray obj = JSONArray.fromObject(str); Object[] rts = obj.toArray(); List<T> result = new ArrayList<T>(rts.length); for (int i = 0; i < rts.length; i++) { Object jo = rts[i]; T ele = (T)JSONObject.toBean((JSONObject) jo, clazz); result.add( ele ); } return result; } @SuppressWarnings("unchecked") public static <T>T decodeObject(String json,Class<T> clz){ JSONObject jsonObject = JSONObject.fromObject(json); T bean = (T) JSONObject.toBean(jsonObject, clz); return bean; } }
紫蜜蜂 2013-10-30
  • 打赏
  • 举报
回复
把bean里的date去掉了,全部改用字符串,date的格式太麻烦了
失落夏天 2013-10-29
  • 打赏
  • 举报
回复
JSONObject.fromObject(readlist.get(i)) 返回的应该是jsonObject的类型。 而你需要的是Home类型对吧? 具体转化方法你参考我 json格式转换成javaBean对象的方法 帖子中的方法吧。那个方法可以转换成Home型的。当然,相对较麻烦。
MiceRice 2013-10-29
  • 打赏
  • 举报
回复
需要自己注册一个Date类型的处理器,具体可以Google。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧