我正在尝试使用Retrofit2和GSON解析Wordpress plugins API的JSON结果。我已经使用众所周知的website生成了POJO,并将其修改为以下模型:
插件ApiResponse.java
public class PluginsApiResponse {
@SerializedName("plugins")
@Expose
private List<Plugin> plugins = null;
public List<Plugin> getPlugins() {
return plugins;
}
public void setPlugins(List<Plugin> plugins) {
this.plugins = plugins;
}
}
插件.java
public class Plugin {
@SerializedName("name")
@Expose
private String name;
@SerializedName("homepage")
@Expose
private String homepage;
@SerializedName("screenshots")
@Expose
private Screenshots screenshots;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHomepage() {
return homepage;
}
public void setHomepage(String homepage) {
this.homepage = homepage;
}
public Screenshots getScreenshots() {
return screenshots;
}
public void setScreenshots(Screenshots screenshots) {
this.screenshots = screenshots;
}
}
屏幕截图
public class Screenshots {
@SerializedName("1")
@Expose
private com.dkalsan.retrofitwordpress._1 _1;
@SerializedName("2")
@Expose
private com.dkalsan.retrofitwordpress._2 _2;
@SerializedName("3")
@Expose
private com.dkalsan.retrofitwordpress._3 _3;
public com.dkalsan.retrofitwordpress._1 get1() {
return _1;
}
public void set1(com.dkalsan.retrofitwordpress._1 _1) {
this._1 = _1;
}
public com.dkalsan.retrofitwordpress._2 get2() {
return _2;
}
public void set2(com.dkalsan.retrofitwordpress._2 _2) {
this._2 = _2;
}
public com.dkalsan.retrofitwordpress._3 get3() {
return _3;
}
public void set3(com.dkalsan.retrofitwordpress._3 _3) {
this._3 = _3;
}
}
_1.java(_2.java和_3.java相同)
public class _1 {
@SerializedName("src")
@Expose
private String src;
@SerializedName("caption")
@Expose
private String caption;
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this.caption = caption;
}
}
如果屏幕快照字段不包含任何条目,则会出现此问题。我已经设置了HttpLoggingInterceptor,它记录了响应代码200和json的全部内容。根据以下article,我还排除了可能是互联网连接问题的可能性。如果我从模型中删除屏幕截图字段,则解析不会有麻烦。由于GSON试图对不存在的字段1、2和3进行反序列化,错误是否可能仍然存在,如果是,该如何处理?
最佳答案
原来问题出在JSON响应格式中。如果没有屏幕截图,则将其格式化为JSON数组,否则将其格式化为包含对象1、2、3等的JSON对象。我已经设法通过遵循this stackoverflow question上的答案进行修复。