日期:2014-05-16  浏览次数:20491 次

java 反射机制构建JSON字符串

接着上一篇文章、今天继续学习利用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