使用Gson反序列化Json的问题

4

你好,我该如何反序列化类型的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);

但这只会用null填充所有内容。如果Json仅为

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

有什么想法吗?

谢谢

2个回答

3
创建另一个类,该类具有Photo类作为属性。
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();

敬礼


我很感激这个答案,但是在我看来,Gson应该有一种方法来映射json字段与对象的映射方式... - Rodrigo Gama

0

你的 JSON 结构无效。你需要将其更改为

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

以匹配您的照片类。

{"photo":{"id":5, "url":"http://pics.com/pic1.jpg"}} 不起作用的原因是 GSON 在您的照片类中查找一个名为 photo 的属性,但该属性不存在。


通常情况下,我们无法更改API。此外,惯例似乎是将所有对象都包装在一个命名的JSON对象中。我宁愿我们的库遵循这些惯例,而不是相反。 - Jason Robinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接