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

有啦这个简直,太爽啦,

利用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;
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-22 05:07:25

利用Java反射机制和泛型,全自动解析json的相关文章

利用Java反射机制完成XML到对象的解析

对于一些小批量的数据,如果采用数据库来存取的话,未免有点大题小作,使用XML文件是个不错的方法,尤其是在一些Web应用中,经常需要缓存一部分数据,如果将这些数据形成XML文件,解析后放入一个Hashtable,那就能大大加快访问的速度. 由于工作的需要,写了一个解析工具,将XML解析成相应的对象列表.以下是源代码,希望对大家有所帮助,更希望大家帮我来改进这个工具. package com.sp.util; /* * author:hingwu * email:[email protected]

利用java反射机制 读取配置文件 实现动态类加载以及动态类型转换

作者:54dabang 在spring的学习过程之中,我们可以看出通过配置文件来动态管理bean对象的好处(松耦合 可以让零散部分组成一个整体,而这些整体并不在意之间彼此的细节,从而达到了真正的物理上的疏散耦合,而非逻辑,有了IOC之后,我们可以让SPRING充当各框架中的整合器,把技术框架进行完美的结合). Spring实现的一个重要的机制是通过反射(java.lang.reflect)读取配置文件,通过配置文件来动态生成配置文件中的类对象.Java动态加载类主要是为了不改变主程序代码,通过修

利用java反射机制实现读取excel表格中的数据

如果直接把excel表格中的数据导入数据库,首先应该将excel中的数据读取出来. 为了实现代码重用,所以使用了Object,而最终的结果是要获取一个list如List<User>.List<Book>等,所以需要使用泛型机制去实现.下面会给出代码,可能会稍微复杂一点,但注释很清晰,希望大家耐心阅读. 在上代码之前简单说一下思路: 1.excel表格必须有表头,且表头中各列的值要与实体类的属性相同: 2.先读取表头信息,然后获取表头列数,接着确定需要使用的set方法的名称,并存到数

利用java 反射机制来实现一个servlet处理多种请求

如果我们想在一个servlet中处理多种请求(比如新闻的添加.删除),简单的可以在jsp提交表单的action路径中添加一个键值对,然后再servlet中接收后根据不同的值来调用不同的方法. jsp端 1 <form action="newsServlet?method=add" method="post"> 2 <input type="text" ..> 3 <input type="submit&qu

利用JAVA反射机制将JSON数据转换成JAVA对象

net.sf.json.JSONObject为我们提供了toBean方法用来转换为JAVA对象, 功能更为强大,  这里借鉴采用JDK的反射机制, 作为简单的辅助工具使用,   有些数据类型需要进行转换, 根据需要进行扩展,  这里可以处理Long和Date类型. 只支持单个JSONObject对象的处理,   对于复杂的JSON对象, 如JSONArray数组, 可考虑先遍历, 获取JSONObject后再进行处理. package common; import java.lang.refle

利用JAVA反射机制实现调用私有方法

1.fragment是AccessibilityFragment的對象.须要被調用的方法的類. setAccessible(true)并非将方法的訪问权限改成了public.而是取消java的权限控制检查.所以即使是public方法.其accessible属相默认也是false try { Class mClass = Class.forName("com.sonymobile.chameleon.workflow.step.AccessibilityFragment"); Metho

利用java反射机制实现List&lt;Map&lt;String, Object&gt;&gt;转化为List&lt;JavaBean&gt;

最近在用mybatis做项目,遇到将date格式化显示到easyui的问题,需要将List<Map<String, Object>>转化为List<JavaBean>,研究好久,终于在网上找到了一个方法: 核心方法如下: [java] view plain copy /** * 根据List<Map<String, Object>>数据转换为JavaBean数据 * @param datas * @param beanClass * @retur

Android利用Java反射机制修改Android System Language

private void updateLanguage(Locale locale) { try { Object objIActMag, objActMagNative; Class clzIActMag = Class.forName("android.app.IActivityManager"); Class clzActMagNative = Class.forName("android.app.ActivityManagerNative"); Method

浅析Java反射机制

一.反射的理解 反射类似于我们平时见到的平面镜的反射:被反射的目标(任意一个已知名称的类),反射出来的"镜像"(我们的类对象<Java中任意一个类都对应有一个类对象>),通过这个"镜像",类对象,我们就可以在运行时获取任意一个已知名称的类对应的信息. 二.Java反射机制提供的功能 Java反射机制主要提供了以下功能:在运行时判断任意一个独享所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方