java - 无法使用 Gson 将 JSON 编组为复杂的 Java 类型
问题描述
我正在尝试使用 Gson 和 Java 1.8 将 JSON 有效负载编组为复杂的 Java 类型。
我用于 Gson 的依赖项:
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>converter-gson</artifactId>
<version>2.4.0</version>
</dependency>
JSON 响应负载(我用来模拟我的 POJO)作为字符串输入:
{
"header":{
"timestamp":"1932264786"
},
"entity":[
{
"id":"1",
"musician":{
"genre":{
"type":"jazz"
},
"timestamp":"2593264786",
"musician":{
"id":"23104"
}
}
}
]
}
标头.java:
import lombok.Data;
@Data
public class Header {
private String timestamp;
}
实体.java:
import lombok.Data;
@Data
public class Entity {
private String id;
@Data
static class Musician {
@Data
static class Genre {
private String type;
}
@Data
class InnerMusician {
private String id;
}
}
}
GsonObject.java(这是包含上述所有 POJO 的顶级类):
import lombok.Data;
import java.util.List;
@Data
public class GsonObject {
private Header header;
private List<Entity> entities;
}
在我的调用类中,这是未填充的代码:
Gson gson = new Gson();
GsonObject gsonObject = gson.fromJson(json, (Type) GsonObject.class);
内部gsonObject
标头类已正确填充时间戳,但List<GsonObject> entities
为空。
我可能做错了什么?
解决方案
正如@Savior 指出的那样,在 JSON 中,属性是entity
,在你的类中是entities
.
在您的类中使用@SerializedName
将 java 属性映射到 JSON 属性。
@SerializedName("entity")
private List<Entity> entities;
推荐阅读
- python - 大熊猫滚动最大值的numpy版本
- c# - 如何使用 ASP.net MVC 在同一控制器中调用函数任务?
- java - 布尔属性如何与 createBooleanBinding 一起使用
- react-native - 卡片视图标题中的背景颜色(react-native)
- python - 如何使用python枚举一些文本文件?
- elasticsearch - 为什么kibana不显示所有搜索结果?
- html - 无法将外部样式表连接到 HTML
- javascript - 如何画一个圆圈而不是一个标记?
- javascript - NestJS:转换响应
- python - 为什么 itertools.count() 与 zip 一起使用时会消耗额外的元素?