无法使用 Gson 编组 JSON 到复杂的 Java 类型
Unable to Marshal JSON to Complex Java Type using Gson
我正在尝试使用 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"
}
}
}
]
}
Header.java:
import lombok.Data;
@Data
public class Header {
private String timestamp;
}
Entity.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 的 top-level class):
import lombok.Data;
import java.util.List;
@Data
public class GsonObject {
private Header header;
private List<Entity> entities;
}
在我的调用 class 中,这是未填充的代码:
Gson gson = new Gson();
GsonObject gsonObject = gson.fromJson(json, (Type) GsonObject.class);
gsonObject
内部 header class 已正确填充时间戳,但 List<GsonObject> entities
为空。
我可能做错了什么?
正如@Savior 指出的那样,在 JSON 中,属性是 entity
而在你的 class 中是 entities
。
在 class 中使用 @SerializedName
将 java 属性映射到 JSON 属性。
@SerializedName("entity")
private List<Entity> entities;
我正在尝试使用 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"
}
}
}
]
}
Header.java:
import lombok.Data;
@Data
public class Header {
private String timestamp;
}
Entity.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 的 top-level class):
import lombok.Data;
import java.util.List;
@Data
public class GsonObject {
private Header header;
private List<Entity> entities;
}
在我的调用 class 中,这是未填充的代码:
Gson gson = new Gson();
GsonObject gsonObject = gson.fromJson(json, (Type) GsonObject.class);
gsonObject
内部 header class 已正确填充时间戳,但 List<GsonObject> entities
为空。
我可能做错了什么?
正如@Savior 指出的那样,在 JSON 中,属性是 entity
而在你的 class 中是 entities
。
在 class 中使用 @SerializedName
将 java 属性映射到 JSON 属性。
@SerializedName("entity")
private List<Entity> entities;