[英]Is there a way to create the bean class from a json response
上述問題是參考上述線程中描述的內容。 有太多的API可以靈活地以XML或JSON形式返回響應。 **我想知道是否有一種方法可以自動構造對應於JSON響應的java bean。 **
讓我們說你得到一個像這樣的對象
[
{
"name":"Java 6 Greatest Hits",
"Author":"Jim Bob Jones",
"price":10.25
},
{
"name":"How to raise a goat",
"Author":"Sir Paxton",
"price":55.97
},
{
"name":"Snow - It is cold",
"Author":"Dr. White",
"price":9.99
}
]
你想要一個類似的課程
public class Book{
private String author;
private String name;
private Number price
}
getter和setter一個選項是使用像JSONGen這樣的服務,它將創建該類。 首先 ,您需要使用它,並在項目中包含生成的代碼。 另一種選擇可能是動態生成使用了Javassist或CGLIB的類,但除非你使用反射來訪問它的成員,因此,即使這將是一個類,它會像一個真正討厭地圖該類將是無用的。 使用JSONObject絕不會更好
似乎一個簡單的消息類型實體不符合您的要求?
如果你想將json轉換為現有的已知java bean類,
許多lib都可以這樣做,比如
http://json-lib.sourceforge.net/apidocs/net/sf/json/class-use/JSONObject.html
JSONObject.toBean(JSONObject jsonObject, Class beanClass)
Creates a bean from a JSONObject, with a specific target class.
順便說一句,如果你正在與restful webservice進行通信,org.springframework.web.client.RestTemplate將幫助你獲得直接bean結果而不是json。
如果類不存在,則需要使用java反射機制的程序。 嘗試使用CGLIB, http: //cglib.sourceforge.net/,動態創建類似BeanMap的類。 我寫了一個簡單的示例,但是要潔具,操作類字節很難,你可能會遇到JVM的奇怪問題。 強烈不鼓勵這樣做。
public static BeanMap generateBean(JSONObject json) {
BeanGenerator generator = new BeanGenerator();
Iterator keys = json.keys();
while (keys.hasNext()) {
Object key = keys.next();
Object value = json.get(key);
Class keyClass = guessValueClass(value);
generator.addProperty(key.toString(), keyClass);
}
Object result = generator.create();
BeanMap bean = BeanMap.create(result);
keys = json.keys();
while (keys.hasNext()) {
Object key = keys.next();
Object value = json.get(key);
bean.put(key, value);
}
return bean;
}
/**
* TODO fix guess
*/
static Class guessValueClass(Object value) {
try {
Integer.parseInt(value.toString());
return Integer.class;
} catch (NumberFormatException e1) {
}
try {
Double.parseDouble(value.toString());
return Double.class;
} catch (NumberFormatException e1) {
}
return String.class;
}
我認為這里的主要問題是JSON響應缺少類型信息 ,上次我在Java中檢查:-)你需要聲明類屬性的類型。 因此,需要一些啟發式來推斷JSON響應中值的類型。
有關SO中的相關問題,請參閱: 從JSON生成Java類?
如果您正在使用傑克遜(那里最受歡迎的圖書館),請嘗試
https://bitbucket.org/astav/jsontojava/wiki/Home
它的開源和任何人都應該能夠貢獻。
摘要
JsonToJava源類文件生成器,它根據提供的示例json數據推斷模式,並生成必要的Java數據結構。
在編寫實際代碼之前,它鼓勵團隊先在Json中思考。
特征
可以為任意復雜的層次結構生成類(遞歸)可以讀取現有的Java類,如果它可以反序列化到這些結構中,將會這樣做當存在模糊情況時將提示用戶輸入
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.