我正在尝试使用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上的答案进行修复。

09-25 22:23
查看更多