Java反射實現JSON與JavaBean之間的轉換
阿新 • • 發佈:2019-02-17
專案中需要將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; }