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

相關文章
相關標籤/搜索