利用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,他能够接受任何类型java

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开发的时候挺有用的。
源码下载地址


android

相关文章
相关标签/搜索