当前位置: 首页 > 知识库问答 >
问题:

空字段包含子字段时发生GSON转换错误

楚俊迈
2023-03-14

我试图解析JSON结果从Wordpress插件API使用RetroFit2和GSON。我使用著名的网站生成了我的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;
    }

}

截图。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;
    }

}

_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。根据下面的文章,我还排除了互联网连接问题的可能性。如果我从模型中删除screenshots字段,解析就不会有问题。是否可能由于GSON试图反序列化不存在的字段1、2和3而导致错误持续存在?如果是,如何处理?

共有1个答案

仰经武
2023-03-14

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

 类似资料:
  • 假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?

  • 问题内容: 在MySQL中,使用LIKE非常普遍。我们使用它是这样的:。我们有一个子字符串,而字段有完整的字符串。但是我需要的是相反的东西。我在字段中有子字符串。因此,我希望该行包含我的字符串的子字符串。假设表是: 而且我有一个来自用户的字符串:。我需要返回这样的MySQL查询,因为这是用户字符串的子字符串。就像是: 提前致谢。 问题答案: 您在寻找LIKE运算子 模式匹配使用SQL简单的正则表达

  • 问题内容: 有人可以帮我弄这个吗。 我有我的选择查询 我想要选择查询的内容,并在下载csv文件时包含标题,因此我执行了以下查询: 但这给了我这个错误 我想在我下载的csv文件中有这样的输出: 先感谢您。 问题答案: 如错误所示:来自查询的词典包含的键多于您在DictWriter构造函数中指定的字段名称。 一种解决方案是提前对其进行过滤,如下所示: 另一种解决方案是仅使用那些字段来构造查询: 但是,

  • 我使用了Gson,但我需要转换器只序列化非空值或非空值。 例如: 现在,将该对象转换为json的Gson实例如下所示

  • 问题内容: 从golang规范 是否有使用内的 空白 字段的实际方案?(一些代码片段将不胜感激) 问题答案: 填充正是所谓的:一些填充,用于将以下字段与您的需求对齐,例如,匹配C结构的布局。无法访问它(至少在没有软件包不安全的情况下)。

  • 在Java中,我在DB2上执行以下查询: 问题的原因是什么? 更新:准备语句的代码: