java 反射机制构建JSON字符串

接着上一篇文章、今天继续学习利用java 反射机制构建JSON字符串。

JSON的格式跟使用的方式方法就不讲了、这个百度一下就有......好了今天心情很糟糕、直接上代码吧!

  1. import java.lang.reflect.Field;  
  2. import java.lang.reflect.InvocationTargetException;  
  3. import java.lang.reflect.Method;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import com.test.hzw.bean.test_user;  
  8. import com.test.hzw.dao.impl.DaoImpl;  
  9.   
  10. /** 
  11.  * Json转换测试类 
  12.  * @author 胡汉三 
  13.  * 
  14.  */  
  15. @SuppressWarnings({"unchecked","unused"})  
  16. public class Reflect004 {  
  17.   
  18.     /** 
  19.      * @param args 
  20.      * @throws Exception  
  21.      */  
  22.     public static void main(String[] args) throws Exception {  
  23.         DaoImpl dao = new DaoImpl();  
  24.         test_user u = new test_user();  
  25.         String sqlPage = "SELECT * FROM test_user WHERE id <= ";  
  26.         sqlPage += " (SELECT id FROM test_user ORDER BY id LIMIT "+(2-1)*20+", 1) ";  
  27.         sqlPage += " ORDER BY id LIMIT 20 " ;    
  28.         /* 
  29.          * 从数据库查询并获得集合 
  30.          *  
  31.          * PS: 该方法是上一篇文章的内容 
  32.          */  
  33.         List<test_user> listT = (List<test_user>)dao.findList(u, sqlPage, new ArrayList());  
  34.         String s = ToJsonByList(listT);  
  35.         System.out.println(s);    
  36.         System.out.println(ToJsonByAll(listT.get(0)).toString());  
  37.     }   
  38.       
  39.     /** 
  40.      * 根据List集合生成Json数组格式字符串(只支持bean方式) 
  41.      * @param <T> 
  42.      * @param list 集合对象 
  43.      * @return 
  44.      */  
  45.     public static <T> String ToJsonByList(List<T> list){  
  46.         StringBuffer b = new StringBuffer("[");  
  47.         if(list!=null&&list.size()>0){  
  48.             for (int i = 0; i < list.size(); i++){  
  49.                 Object o = list.get(i);  
  50.                 try {  
  51.                     //调用ToJsonByBean方法  
  52.                     StringBuffer s = ToJsonByBean(o);  
  53.                     if(s!=null&&!s.equals("")){  
  54.                         b.append(s).append(",");   
  55.                     }  
  56.                 } catch (Exception e) {       
  57.                     e.printStackTrace();  
  58.                 }   
  59.             }     
  60.         }  
  61.         b.append("]");  
  62.         return b.replace(b.lastIndexOf(","),b.lastIndexOf(",") + 1 ,"").toString();  
  63.     }  
  64.       
  65.     /**  
  66.      * 根据javaBean生成Json对象格式字符串  
  67.      * @param object 任意javaBean类型对象  
  68.      * @return 拼接好的StringBuffer对象  
  69.      */    
  70.     public static StringBuffer ToJsonByBean(Object object) throws Exception{    
  71.         Class clazz = object.getClass();  //获得Class对象  
  72.         Field[] fields = clazz.getDeclaredFields();  //获得Class对象的字段数组  
  73.         StringBuffer sb = new StringBuffer("{");   
  74.         /* 
  75.          * 循环字段数组 
  76.          */  
  77.         for (Field field : fields) {      
  78.             String fieldName = field.getName(); //获得字段名称     
  79.             //获得字段对应的get方法对象  
  80.             Method method = clazz.getMethod("get" + change(fieldName), null);    
  81.             //调用get方法获得字段的值  
  82.             Object property = method.invoke(object, null);    
  83.               
  84.             /* 
  85.              * 生成json字符串数据 
  86.              */  
  87.             if(property == null){    
  88.                 sb.append("\""+fieldName+"\":\"\",");      
  89.             }else{  
  90.                 if (field.getType().getName().equals("java.lang.Boolean"))  
  91.                     sb.append("\""+fieldName+"\":"+Boolean.valueOf(property.toString())+",");     
  92.                 else  
  93.                     sb.append("\""+fieldName+"\":\""+property+"\",");   
  94.             }    
  95.         }               
  96.         sb.append("}");            
  97.         return sb.replace(sb.lastIndexOf(","),sb.lastIndexOf(",") + 1 ,"");    
  98.     }    
  99.         
  100.     /**  
  101.      * @param src 源字符串  
  102.      * @return 字符串,将src的第一个字母转换为大写,src为空时返回null  
  103.      */    
  104.     public static String change(String src) {    
  105.         if (src != null) {    
  106.             StringBuffer sb = new StringBuffer(src);    
  107.             sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));    
  108.             return sb.toString();    
  109.         } else {    
  110.             return null;    
  111.         }    
  112.     }    
  113.       
  114.     /**  
  115.      * 生成Json数组格式字符串  
  116.      * @param object 任意类型对象  
  117.      * @return 拼接好的StringBuffer对象  
  118.      */    
  119.     public static StringBuffer ToJsonByAll(Object object) throws Exception{    
  120.         Class clazz = object.getClass();    
  121.         Field[] fields = clazz.getDeclaredFields();    
  122.         StringBuffer sb = new StringBuffer("{[");    
  123.         for (Field field : fields) {    
  124.             String fieldName = field.getName();    
  125.             Method method = clazz.getMethod("get" + change(fieldName), null);    
  126.             Object property = method.invoke(object, null);    
  127.             if(property == null){      
  128.                 sb.append("\"\",");    
  129.             }else{    
  130.                 sb.append("\"" + property + "\",");    
  131.             }    
  132.         }           
  133.         sb.append("]}");            
  134.         return sb.replace(sb.lastIndexOf(","),sb.lastIndexOf(",") + 1 ,"");    
  135.     }  
  136.       
  137.   

你可能感兴趣的:(java 反射机制构建JSON字符串)