2014-10-05 79 views
0

我有Java bean類,例如:轉換JSON對象的Java Bean org.json包

public class User implements Serializable{ 
    protected String Name  = null; 
    protected String Password = null; 
    // ... 
} 

我可以用

User u = new User(); 
u.setName("AAA"); 
u.setPassword("123"); 
JSONObject jo = new JSONObject(u); 

輕鬆地將其轉換爲org.json對象它的方式將JSONObject轉換爲Java bean類?

+1

不,Java未能Python中,你不能創建在運行時 – msrd0 2014-10-05 15:57:08

回答

1

沒有使用json.org庫的內置方法。

根據您的需求,您可以

  1. 寫每個豆,它使用JSONObject#has()JSONObject#get*()來得到所需的值,並處理任何類型的問題的方法fromJSONObject()
  2. 編寫一個全局方法,它使用JSONObject#names()和reflection來用來自JSONObject的數據填充bean實例。這並不困難,但如果您只需要將它與兩個bean類一起使用,就可能過於繁重。
9

有一個現有的庫實現了將JSON對象轉換爲Java bean的反射方法,名爲Gson

使用它,你可以轉換JSON文本(在你的代碼中調用jo.toString()的結果)回User類型:

User user = new Gson().fromJson(jSONObjectAsString, User.class); 

該庫還實現了toJson()方法,所以它應該是可能爲你在所有情況下用Gson替換您對json.org實現的使用。

1
public static Object toBean(JSONObject jobject, Object object) { 
    for (Field field : object.getClass.getDeclaredFields()) { 
     field.set(object, jobject.getString(field.getName())); 
    } 
} 

Call: 

User user = (User) toBean(jo, new User()); 
+1

類你的意思'object.getClass()。getDeclaredFields()'?忘記了'return'聲明。 – 2016-11-24 10:51:17

+0

添加此語句'field.setAccessible(true);' – Vishrant 2017-06-13 05:44:07