利用Java反射机制和泛型,全自动解析json

5 篇文章 0 订阅

有啦这个简直,太爽啦,

利用Java 反射机制,利用Class 就可以得到 类的 变量  Field[] fields=cls.getDeclaredFields();

还可以通过类中 的方法名字 去执行这个方法

 m1 = cls.getDeclaredMethod(getMothodName(fields[j].getName()), String.class);
m1.invoke(result,json.getString(fields[j].getName()) );


利用泛型 去获取这个Class 的实例 T result= cls.newInstance();   上面的便可以执行


方法名 如何获取得到    假设说一个变量名称为name 那么 设置这个的参数就是 setName();

很明显 变量名前加上 set 然后 变量名第一个字符大写 加在一起就是setName


整个方法如下:


 public static <T> List<T> getObject(JSONArray arr,Class<T> cls){
       
	
    	Field[] fields=cls.getDeclaredFields();
    	Method m1;
    	List<T>  list = new ArrayList<T>(); 
    	try {
    	
    	    
	    	T result = null;
			try {
				result = cls.newInstance();
			} catch (InstantiationException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}  
    	        for(int i=0;i<arr.length();i++)
		{
    		JSONObject json = arr.getJSONObject(i);
			
    		    for (int j = 0; j < fields.length; j++) {
    			 
                      

    			 m1 = cls.getDeclaredMethod(getMothodName(fields[j].getName()), String.class);
    			 m1.invoke(result,json.getString(fields[j].getName()) );
    			 
			}
    		   list.add(result);
          
			
				 
				
			}
    	} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return  list;
    }
    private static String getMothodName(String name){
    	 char[] b =name.toCharArray();
    	 if (b[0] >= 97 && b[0] <= 122) {
    		    b[0] = (char) (b[0] - 32);
    		 }
    	 String mothodName="set"+new String(b);
    		 return mothodName;
    }


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值