有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当空字段包含子字段时,java GSON转换错误

我正在尝试使用第2和GSON解析来自Wordpress plugins API的JSON结果。我使用众所周知的website生成了我的POJO,并将其修改为以下模型:

PluginsApiResponse。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;
    }

}

截图。java

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;
    }

}

\u 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,我还排除了互联网连接问题的可能性。如果我从模型中删除screenshots字段,解析就不会有问题。由于GSON试图反序列化不存在的字段123,错误是否可能持续存在?如果是,如何处理


共 (1) 个答案

  1. # 1 楼答案

    原来问题出在JSON响应格式上。如果没有截图,它将被格式化为JSON数组,否则它将被格式化为包含对象1、2、3等的JSON对象。我已经按照this stackoverflow question上的答案解决了这个问题