利用java的反射来实现java的类对象转化为json对象

 //在写程序的时候我们可以使用反射来使程序看起来更具有“灵性”,也就是可移植性比较强!反射就是能够让程序员在程序运行的时候可以获取对象类型信息。
举个简单的列子:
import java.lang.reflect.Field;
public class Ref {
    public static void main(String[] args) {
        Persion p = new Persion();
        Class c = p.getClass();
        Field[] f = c.getDeclaredFields(); //返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段, 这个是返回所有字段,包括私有属性
        for (int i=0; i<f.length; i++) {
            System.out.println(f[i]);
        }
    }
}
class Persion {
    public int id;
    private String name;
}
打印结果:
public int Persion.id
private java.lang.String Persion.name
从打印结果我们能够看出,这个Field中包含,类属性的访问修饰符,属性类型,以及属性名。同过这些我们可以很方便的来做我们接下来要做的事情。写一个通用的方法,来实现java对象到json对象的转化,虽然有道json jar包已经有了这些功能,但是这不妨挨“重复制造轮子‘,这是一个学习的过程。
首先我们的参数是Object,他可以接受任何类型

public static JSONObject changeJson(Object object) throws Exception {
        JSONObject jb = new JSONObject(); //声明json对象
        Class c = object.getClass();  //获取类的类型类
        Field[] fields = c.getDeclaredFields(); //获取属性集合
        Field.setAccessible(fields, true); //在类外面要想获取私有属性的值必须设置
        Object[] name = new Object[fields.length]; //存储变量名
        Object[] value = new Object[fields.length]; //存储变量值
        Object[] type = new Object[fields.length]; //存储变量类型
        for (int i = 0; i < fields.length; i++) { //设置数组的值
            name[i] = fields[i].getName();
            value[i] = fields[i].get(object);
            type[i] = fields[i].getType();
        }

        for (int i = 0; i < name.length; i++) {
            String s1 = type[i].toString(); //变量类型
            String v1 = value[i] + ""; //变量值
            String n1 = name[i].toString(); //变量名
            
            if (s1.contains("String")) {
                if (!v1.equals("null")) {
                    jb.put(n1, v1); //给jsonobject设置key-value
                }
            } else if (s1.contains("long")) {
                jb.put(n1, Integer.parseInt(v1));
            } else if (s1.contains("int")) {
                jb.put(n1, Integer.parseInt(v1));
            }
        }
        return jb;
    }
这个只是简单的小例子,不过在做android开发的时候挺有用的。
源码下载地址


你可能感兴趣的:(利用java的反射来实现java的类对象转化为json对象)