`
hwpok
  • 浏览: 254314 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反射机制 自己设计ajax的json工具 练习

    博客分类:
  • Java
阅读更多
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[flist.length][2];
            
for (int i = 0; i < flist.length; i++
            
{
                fms[i] 
= JSON.assemblyFM(flist[i].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[i][1]))
                
{
                    
return fms[i][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[i].toString());
                
if(fn != null && !fn.equals(""))
                
{
                    jsonInfo.append(
"\"");
                    jsonInfo.append(fn);
                    jsonInfo.append(
"\"");
                    jsonInfo.append(":");
                    jsonInfo.append(
"\"");
                    try
                    
{
                        fv 
= (String) methods[i].invoke(o, (Object[])null);
                        fv 
= fv == 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(
"");
        list.add(po);
        
        po 
= new PersonPO();
        po.setAge(
"27");
        po.setName(
"惠帆");
        po.setSex(
"");
        list.add(po);
        
        System.out.println(JSON.getJsonInfos(list));
    }


}
分享到:
评论

相关推荐

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    Json与pickle数据序列化 软件目录结构规范 本周作业 第5周 心灵分享 ATM存钱取钱案例剖析 模块定义、导入、优化详解 内置模块详解之time与datetime模块 内置模块详解之Range模块 内置模块详解之OS模块 内置模块...

    SCJP部分答案

    总的来说,这个压缩包中的资源可以帮助备考SCJP的学员巩固和理解Java编程的关键知识点,同时通过练习题答案来检验自己的学习效果。对于希望提升Java编程技能或者准备相关面试的人来说,也是非常有价值的参考资料。

    2017年尚学堂Java培训课程大纲.docx

    - **Java反射技术**:深入理解反射机制,包括如何通过Class类获取对象信息、调用方法或设置属性等。 - **Java网络通信**(TCP和UDP):掌握TCP/IP协议的工作原理,学习Socket编程,同时了解UDP协议的特点及其适用...

    Java学习路线图文.pdf

    1. **Ajax+JSON**:异步请求提升用户体验,JSON作为数据交换格式。 2. **jQuery**:简化JavaScript操作DOM、事件处理和动画。 3. **ExtJS**:构建桌面级Web应用的前端框架。 4. **Node.js**:基于Chrome V8引擎的...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 迭代器协议和for循环工作机制 06 迭代器补充 07 三元运算,列表解析,生成器表达式 第19章 01 生成器函数 02 生成器函数的好处 03 母鸡下蛋的传说 04 生成器特性阐释 05 生产者消费者模型 06 第三次作业讲解 ...

Global site tag (gtag.js) - Google Analytics