日期:2014-05-16 浏览次数:20491 次
接着上一篇文章、今天继续学习利用java 反射机制构建JSON字符串。
JSON的格式跟使用的方式方法就不讲了、这个百度一下就有......好了今天心情很糟糕、直接上代码吧!
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import com.test.hzw.bean.test_user; import com.test.hzw.dao.impl.DaoImpl; /** * Json转换测试类 * @author 胡汉三 * */ @SuppressWarnings({"unchecked","unused"}) public class Reflect004 { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { DaoImpl dao = new DaoImpl(); test_user u = new test_user(); String sqlPage = "SELECT * FROM test_user WHERE id <= "; sqlPage += " (SELECT id FROM test_user ORDER BY id LIMIT "+(2-1)*20+", 1) "; sqlPage += " ORDER BY id LIMIT 20 " ; /* * 从数据库查询并获得集合 * * PS: 该方法是上一篇文章的内容 */ List<test_user> listT = (List<test_user>)dao.findList(u, sqlPage, new ArrayList()); String s = ToJsonByList(listT); System.out.println(s); System.out.println(ToJsonByAll(listT.get(0)).toString()); } /** * 根据List集合生成Json数组格式字符串(只支持bean方式) * @param <T> * @param list 集合对象 * @return */ public static <T> String ToJsonByList(List<T> list){ StringBuffer b = new StringBuffer("["); if(list!=null&&list.size()>0){ for (int i = 0; i < list.size(); i++){ Object o = list.get(i); try { //调用ToJsonByBean方法 StringBuffer s = ToJsonByBean(o); if(s!=null&&!s.equals("")){ b.append(s).append(","); } } catch (Exception e) { e.printStackTrace(); } } } b.append("]"); return b.replace(b.lastIndexOf(","),b.lastIndexOf(",") + 1 ,"").toString(); } /** * 根据javaBean生成Json对象格式字符串 * @param object 任意javaBean类型对象 * @return 拼接好的StringBuffer对象 */ public static StringBuffer ToJsonByBean(Object object) throws Exception{ Class clazz = object.getClass(); //获得Class对象 Field[] fields = clazz.getDeclaredFields(); //获得Class对象的字段数组 StringBuffer sb = new StringBuffer("{"); /* * 循环字段数组 */ for (Field field : fields) { String fieldName = field.getName(); //获得字段名称 //获得字段对应的get方法对象 Method method = clazz.getMethod("get" + change(fieldName), null); //调用get方法获得字段的值 Object property = method.invoke(object, null); /* * 生成json字符串数据 */ if(property == null){ sb.append("\""+fieldName+"\":\"\","); }else{ if (field.getType().getName().equals("java.lang.Boolean")) sb.append("\""+fieldName+"\":"+Boolean.valueOf(property.toString())+","); else sb.append("\""+fieldName+"\":\""+property+"\","); } } sb.append("}"); return sb.replace(sb.lastIndexOf(","),sb.lastIndexOf(",") + 1 ,""); } /** * @param src 源字符串 * @return 字符串,将src的第一个字母转换为大写,src为空时返回null */ public static String change(String src) { if (src != null) { StringBuffer sb = new StringBuffer(src); sb.setCharAt(0, Character.toUpperCase(sb.charAt(0))); return sb.toString(); } else { return null; } } /** * 生成Json数组格式字符串 * @param object 任意类型对象 * @return 拼接好的StringBuffer对象 */ public static StringBuffer ToJsonByAll(Ob