2012-03-09 42 views
0

我想使用Gson反序列化通用列表。 我能夠反序列化JSON如下:Java gson通用數組/列表反序列化

[{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"}, 
{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"}, 
{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"}, 
{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}] 

用下面的代碼:

T[] array = (T[])java.lang.reflect.Array.newInstance(p_class, 0); 
gson.fromJson(content, array.getClass()); 

但現在,我有以下的JSON我無法弄清楚如何與反序列化GSON :

[{"brand":{"updated_at":"2012-03-09T11:13:31Z","id":1,"title":"Moda","position":0,"short_name":"Md"}}, 
{"brand":{"updated_at":"2012-03-09T11:13:40Z","id":2,"title":"Sissi","position":1,"short_name":"SI"}}, 
{"brand":{"updated_at":"2012-03-09T11:13:47Z","id":3,"title":"Levis","position":2,"short_name":"LV"}}, 
{"brand":{"updated_at":"2012-03-09T11:14:03Z","id":4,"title":"Dolce&Gabanna","position":3,"short_name":"DG"}}] 

感謝您的幫助!

+0

奇怪的是,使用同樣的技術創建4品牌模型,但它們的所有屬性均爲空 – seriakillaz 2012-03-09 14:03:36

+0

什麼是代碼中的'p_class'? – curioustechizen 2012-03-09 14:04:06

+0

p_class是一個簡單的Class對象,例如:Brand.class – seriakillaz 2012-03-09 14:05:49

回答

4

您需要創建具有名爲品牌的對象,是一種類型的p_class一個新的類。然後像你以前那樣在你的新類上使用gson,它會返回你一個新類的數組。例如:

class Brand{ 
    private p_class brand; 

    public p_class getBrand(){ 
     return brand; 
    } 
} 

和GSON:

List<Brand> brands = (List<Brand>) gson.fromJson(content, new TypeToken<List<Brand>>(){}.getType()); 

另一種方法就是用普通的JSON做對象在Android框架可供選擇:

JSONArray ar = new JSONArray(content); 
    for(int i=0; i<ar.length(); i++){ 
     JSONObject obj = ar.getJSONObject(i); 

     //here is your desired object 
     p_class p = gson.fromJson(obj.getJSONObject("brand").toString(), p_class.class); 
    } 
+0

有沒有一種方法可以一般地自動創建這些類?我需要將此代碼保留爲通用 – seriakillaz 2012-03-09 14:07:29

+0

我剛更新了我的答案。第二個選項是一個例子 – waqaslam 2012-03-09 14:16:51

+0

你的第一個解決方案不能一概而論,但你的第二個解決方案可以是,所以它是一個很好的答案,謝謝! – seriakillaz 2012-03-09 14:18:41