我有Java bean类,例如:
public class User implements Serializable{
protected String Name = null;
protected String Password = null;
// ...
}
我可以使用轻松地将其转换为org.json
对象
User u = new User();
u.setName("AAA");
u.setPassword("123");
JSONObject jo = new JSONObject(u);
这是将JSONObject
转换为Javabean类的方法吗?
有一个现有的库实现了将JSON对象转换为Javabean的反射方法,称为Gson。
使用它,您可以将JSON文本(代码中调用jo.toString()
的结果)转换回User
类型:
User user = new Gson().fromJson(jSONObjectAsString, User.class);
这个库还实现了一个toJson()
方法,因此您应该可以在所有情况下用Gson替换对json.org实现的使用。
使用json.org库没有内置的方法可以做到这一点。
根据您的需要,您可以选择
- 为每个bean编写一个
fromJSONObject()
方法,该方法使用JSONObject#has()
和JSONObject#get*()
来获得所需的值并处理任何类型的问题 - 编写一个全局方法,使用
JSONObject#names()
和反射用JSONObject中的数据填充bean实例。这并不困难,但如果您只需要将其与几个bean类一起使用,则可能会过于繁重
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());