1. 程式人生 > >Java反射實現JSON與JavaBean之間的轉換

Java反射實現JSON與JavaBean之間的轉換

        專案中需要將Websocket伺服器傳來的JSON字串解析並存入資料庫,該JSON字串是與系統中的實體一一對應的,如果要單獨解析會十分麻煩,而且一大段程式碼很不美觀,於是寫了一個小工具方法,自動將JSON轉換為對應的JavaBean。

下面上程式碼:

    /**
     * 將JSON轉換為對應的JavaBean
     * @param jsonObject 需要轉換的JSON物件
     * @param t 需要轉換的JavaBean
     * @param <T> 泛型
     * @return 返回轉換後的JavaBean
     * @throws IllegalAccessException 丟擲IllegalAccessException異常
     */
    public static <T extends Object> T jsonToObject(JSONObject jsonObject,T t) throws IllegalAccessException {

        // 反射獲取該JavaBean所有的屬性
        Field[] fields = t.getClass().getDeclaredFields();

        // 遍歷所有屬性
        for (Field field:fields) {
            // 如果該屬性對應了JSON中的某個值,則對JavaBean進行賦值
            if (jsonObject.get(field.getName()) != null) {
                // 將JavaBean屬性的Accessible設為True,避免Private屬性無法讀取
                field.setAccessible(true);
                // 對相應屬性進行賦值
                if (field.getType() == java.util.Date.class) {
                    field.set(t,new Date(Long.parseLong(jsonObject.get(field.getName()).toString())));
                } else if (field.getType() == java.lang.Byte.class) {
                    field.set(t,Byte.parseByte(jsonObject.get(field.getName()).toString()));
                } else {
                    field.set(t,jsonObject.get(field.getName()));
                }

            }
        }

        // 返回轉換後的JavaBean
        return t;
    }