2011-02-28 54 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对象中。我宁愿我们的图书馆遵守这些惯例而不是其他方式。 –