首页 > 解决方案 > Gson fromJson 返回空数据

问题描述

我使用 Gson.fromJson() 返回空值,但我不明白为什么。我正在调用一个 API,它以这种格式返回一些数据:

{
  "RealisedItems":{
    "realisedItem":[
      {
        "actionItem1":1,
        "actionItem2":"ITEM_ANSWER",
        "actionItem3":"CREATE_ITEM",
        "actionItem4":[
          "XXXXXXX"
        ]
      },
      {
        "actionItem1":2,
        "actionItem2":"ITEM_ANSWER",
        "actionItem3":"LINK_ITEM",
        "actionItem5":"202007050000",
        "actionItem4":[
          "XXXXXXX"
        ]
      }
    ]
  }
}

这是我接收数据的对象:

public class RealisedItems {
    private List<RealisedItem> realisedItem = null;

    public List<RealisedItem> getRealisedItem() {
        return realisedItem;
    }

    public void setRealisedItem(List<RealisedItem> realisedItem) {
        this.realisedItem = realisedItem;
    }
}

public class RealisedItem {

    private Long actionItem1;
    private String actionItem2;
    private String actionItem3;
    private List<String> actionItem4 = null;
    private String actionItem5;

    public Long getActionItem1() {
        return actionItem1;
    }

    public void setActionItem1(Long actionItem1) {
        this.actionItem1 = actionItem1;
    }

    public String getActionItem2() {
        return actionItem2;
    }

    public void setActionItem2(String actionItem2) {
        this.actionItem2 = actionItem2;
    }

    public String getActionItem3() {
        return actionItem3;
    }

    public void setActionItem3(String actionItem3) {
        this.actionItem3 = actionItem3;
    }

    public List<String> getActionItem4() {
        return actionItem4;
    }

    public void setActionItem4(List<String> actionItem4) {
        this.actionItem4 = actionItem4;
    }

    public String getActionItem5() {
        return actionItem5;
    }

    public void setActionItem5(String actionItem5) {
        this.actionItem5 = actionItem5;
    }
}

使用调试模式,我可以看到这一行的响应对象:gson.fromJson(response, RealisedItems.class);包含您可以在上面看到的字符串格式的 Json,但在此之后我的列表为空。我将相同的代码用于来自不同服务的另一个响应,并且我的对象填充了数据。

据我所知,在第一个“realizedItem”对象中,我有 4 个项目,而在第二个中,我有 5 个。这会导致这个问题吗?

我试图将列表更改为数组(RealisedItem []),但它也不起作用。我还尝试将@Expose 与@SerializedName 一起使用,并更改为Gson gson = new Gson();第五项没有@Expose 注释,但我的列表仍然为空。Gson gson = new GsonBuilder().create();Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

你能启发我吗?谢谢!

标签: javajsongson

解决方案


感谢@Andreas,我意识到我犯了一个错误并使用 RealisedItems 作为根对象。我刚刚创建了一个名为 ItemsOutput 的新对象,其中包含 RealisedItems 字段。我添加了一个@SerializedName 注释以表明它被称为“RealisedItems”,并带有一个大写字母,并用新创建的对象更改了我的 Gson.fromJson() 调用。它正在工作。谢谢!


推荐阅读