java - 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();
你能启发我吗?谢谢!
解决方案
感谢@Andreas,我意识到我犯了一个错误并使用 RealisedItems 作为根对象。我刚刚创建了一个名为 ItemsOutput 的新对象,其中包含 RealisedItems 字段。我添加了一个@SerializedName 注释以表明它被称为“RealisedItems”,并带有一个大写字母,并用新创建的对象更改了我的 Gson.fromJson() 调用。它正在工作。谢谢!
推荐阅读
- javascript - 在对象日寻找共性
- c++ - 如何在 C++ 中制作堆栈列表?
- javascript - 使用反应钩子访问 ComponentWillUnmount 中的道具
- reactjs - 使用下拉列表中的选定值显示更改时正确的组件?
- machine-learning - CreateML 活动分类器连续预测
- python - 在 UDP 客户端上显式设置端口号
- go - 在基于通道的管道中使用上下文超时
- javascript - Google Drive Api 中的 Acess_token 为空
- python - Python 元组真的需要订购吗?
- angular - 列表和表格之间的primeng拖放