hwpok 发表于 2013-1-29 12:04:58

java reflect ajax json tool

<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->package myp;

import java.lang.reflect.*;
import java.util.*;

/**
 * @author   惠万鹏
 * @time     2008-06-13
 * @version  1.0
 */
public class JSON {
    /**
     * <p>
     * 本方法用利用反射机制根据对像的域名获得PO的getter方法名
     * </p>
     * 
     * @param o
     *            :po对像
     * @return getter方法名
     */
    private synchronized static String[][] gFMs(Object o) {
        String[][] fms = null;
        if (o != null)
        {
            Field flist[] = o.getClass().getDeclaredFields();
            fms = new String[2];
            for (int i = 0; i < flist.length; i++) 
            {
                fms = JSON.assemblyFM(flist.toString());
            }
        }
        return fms;
    }

    /**
     * <p>
     * 根据域名组装域名和方法名
     * </p>
     * 
     * @param sfield
     * @return
     */
    private synchronized static String[] assemblyFM(String sfield)
    {
        String[] fm = new String[2];
        int len = sfield.length();
        int pointAt = sfield.lastIndexOf(".") + 1;
        
        fm[0] = sfield.substring(pointAt, len);
        fm[1] = String.valueOf(fm[0].charAt(0)).toUpperCase();
        
        if (fm[0].length() > 1) 
        {
            fm[1] += fm[0].substring(1, fm[0].length());
        }
        if (sfield.indexOf("boolean") > 0)
        {
            fm[1] = "is" + fm[1];
        } 
        else 
        {
            fm[1] = "get" + fm[1];
        }
        fm[1] += "()";
        return fm;
    }
    
    /**
     * <p>po的方法里是否含有域的getter方法</p>
     * @param fms
     * @param method
     * @return
     */
    private static String getFN(String[][] fms, String method)
    {
        if(fms != null)
        {
            int len = method.length();
            int pointAt = method.lastIndexOf(".") + 1;
            String methodName = method.substring(pointAt, len);
            for(int i = 0; i < fms.length; i++)
            {
                if(methodName.equals(fms[1]))
                {
                    return fms[0];
                }
            }
        }
        return "";
    }

    /**
     * <p>得到单个po的json info</p>
     * @param o
     * @return
     */
    private static String getJsonInfo(Object o) {
        StringBuffer jsonInfo = new StringBuffer("{");
        String[][] fms = JSON.gFMs(o);
        if(fms != null){
            String fn = "";
            String fv = "";
            Method[] methods = o.getClass().getDeclaredMethods();
            for(int i = 0; i < methods.length; i++)
            {
                fn = JSON.getFN(fms,methods.toString());
                if(fn != null && !fn.equals(""))
                {
                    jsonInfo.append("\"");
                    jsonInfo.append(fn);
                    jsonInfo.append("\"");
                    jsonInfo.append(":");
                    jsonInfo.append("\"");
                    try
                    {
                        fv = String.valueOf(methods.invoke(o, (Object[])null));
                        fv = fv.equals("null") ? "" : fv;
                        jsonInfo.append(fv);
                    }
                    catch(Exception e)
                    {
                        jsonInfo.append("");
                    }
                    jsonInfo.append("\",");
                }
            }
            
        }
        int len = jsonInfo.length();
        String strEnd = jsonInfo.substring(len - 1, len);
        if(strEnd != null && strEnd.equals(","))
        {
            jsonInfo.delete(len - 1, len);
        }
        jsonInfo.append("}");
        return jsonInfo.toString();
    }
    
    /**
     * <p>得到一个集合的json信息</p>
     * @param list
     * @return
     */
    public static String getJsonInfos(List<Object> list){
        StringBuffer infos = new StringBuffer();
        infos.append("{[");
        if(list != null)
        {
            Iterator<Object> itObj = list.iterator();
            while(itObj.hasNext())
            {
                infos.append(JSON.getJsonInfo(itObj.next()));
                if(itObj.hasNext())
                {
                    infos.append(",");
                }
            }
        }
        infos.append("]}");
        return infos.toString();
    }
    public static void main(String[] args) {
        List<Object> list = new ArrayList<Object>();
        
        PersonPO po = new PersonPO();
        po.setAge("25");
        //po.setName("惠万鹏");
        po.setSex("男");
        po.setParty(true);
        list.add(po);
        
        po = new PersonPO();
        po.setAge("27");
        po.setName("惠帆");
        po.setSex("女");
        po.setParty(false);
        list.add(po);
        
        System.out.println(JSON.getJsonInfos(list));
    }

}
页: [1]
查看完整版本: java reflect ajax json tool