Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于使用Gson反序列化Json的问题_Java_Json_Gson - Fatal编程技术网

Java 关于使用Gson反序列化Json的问题

Java 关于使用Gson反序列化Json的问题,java,json,gson,Java,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 = gs

嗨,我如何反序列化该类型的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"}
有什么想法吗


谢谢

您的json结构无效。你需要把它改成

 {"id":5, "url":"http://pics.com/pic1.jpg"}
来匹配你的摄影课


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

创建另一个将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字段如何映射到对象……通常情况下,我们无法更改API。此外,约定似乎是将所有对象包装在一个命名的JSON对象中。我宁愿我们的图书馆遵守这些惯例,而不是相反。