2011-02-28 49 views
4

嗨如何反序列化類型的json對象?關於使用Gson反序列化Json的問題

{"photo":{"id":5, "url":"http://pics.com/pic1.jpg"}}; 

因爲通常我會創建一個類:

public class Photo{ 
    private int id; 
    private String url; 

    public Photo(){ 
    }  
} 

然後只用運行它:

GsonBuilder gsonb = new GsonBuilder(); 
    Gson gson = gsonb.create();  
    Photo photo = gson.fromJson(response, Photo.class); 

但是,這只是一切都充滿用空值。 它的工作,如果我JSON的只是

{"id":5, "url":"http://pics.com/pic1.jpg"} 

任何想法?

謝謝

回答

3

創建具有照片級的物業另一個類

public class PhotoRoot { 

    private Photo photo; 

    public void setPhoto(Photo val) { 
    photo = val; 
    } 

    public Photo getPhoto() { 
    return photo; 
    } 

} 

然後解析它像

GsonBuilder gsonb = new GsonBuilder(); 
Gson gson = gsonb.create();  
PhotoRoot photoRoot = gson.fromJson(response, PhotoRoot.class); 

Photo yourPhoto = photoRoot.getPhoto(); 

問候

+0

我很欣賞這個答案,但是在我看來,Gson有(或者應該有)反映一個json字段如何映射到一個對象的方法...... –

0

你的json結構無效。您需要將其更改爲

{"id":5, "url":"http://pics.com/pic1.jpg"} 

以匹配您的Photo類。

{"photo":{"id":5, "url":"http://pics.com/pic1.jpg"}}不起作用的原因是GSON在Photo類中尋找一個名爲photo的屬性,該屬性不存在。

+0

這往往是我們沒有獲得改變的情況下API。而且,慣例似乎是將所有對象包裝在一個指定的JSON對象中。我寧願我們的圖書館遵守這些慣例而不是其他方式。 –