使用 Jackson 反序列化此 Json 对象?
Deserialize this Json Object using Jackson?
我一直在尝试反序列化从 this API 收到的数据:
{
"result": "success",
"timestamp": 1521038012878,
"data": {
"GB": 14,
"DE": 2,
"US": 2
},
"totalIsPublic": true,
"advanced": false,
"totalDownloads": {
"GB": 14,
"DE": 2,
"US": 2
}
}
这是 POJO class:
public class BintrayDownloadCounts {
private List<Integer> totalDownloads = new ArrayList<>();
@JsonProperty("totalDownloads")
public List<Integer> getTotalDownloads() {
return totalDownloads;
}
public void setTotalDownloads(List<Integer> totalDownloads) {
this.totalDownloads = totalDownloads;
}
}
当我尝试使用反序列化时:
downloadCounts = mapper.readValue(json, BintrayDownloadCounts.class);
我收到这个错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT token
我见过很多包含此错误的问题,但我无法针对此特定用例找出解决方案。可能会注意到 totalDownloads
对象是动态的,即它的内容不是常量。
totalDownloads
属性不是数组,所以不能映射到List<Integer>
。请改用 Map<String, Integer>
并确保您告诉 Jackson 忽略未映射的属性以避免映射错误:
@JsonIgnoreProperties(ignoreUnknown = true)
public class BintrayDownloadCounts {
@JsonProperty("totalDownloads")
private Map<String, Integer> totalDownloads;
public Map<String, Integer> getTotalDownloads() {
return totalDownloads;
}
public void setTotalDownloads(Map<String, Integer> totalDownloads) {
this.totalDownloads = totalDownloads;
}
}
那你就可以开始了:
ObjectMapper mapper = new ObjectMapper();
BintrayDownloadCounts downloadCounts = mapper.readValue(json, BintrayDownloadCounts.class);
我一直在尝试反序列化从 this API 收到的数据:
{
"result": "success",
"timestamp": 1521038012878,
"data": {
"GB": 14,
"DE": 2,
"US": 2
},
"totalIsPublic": true,
"advanced": false,
"totalDownloads": {
"GB": 14,
"DE": 2,
"US": 2
}
}
这是 POJO class:
public class BintrayDownloadCounts {
private List<Integer> totalDownloads = new ArrayList<>();
@JsonProperty("totalDownloads")
public List<Integer> getTotalDownloads() {
return totalDownloads;
}
public void setTotalDownloads(List<Integer> totalDownloads) {
this.totalDownloads = totalDownloads;
}
}
当我尝试使用反序列化时:
downloadCounts = mapper.readValue(json, BintrayDownloadCounts.class);
我收到这个错误:
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.Integer out of START_OBJECT token
我见过很多包含此错误的问题,但我无法针对此特定用例找出解决方案。可能会注意到 totalDownloads
对象是动态的,即它的内容不是常量。
totalDownloads
属性不是数组,所以不能映射到List<Integer>
。请改用 Map<String, Integer>
并确保您告诉 Jackson 忽略未映射的属性以避免映射错误:
@JsonIgnoreProperties(ignoreUnknown = true)
public class BintrayDownloadCounts {
@JsonProperty("totalDownloads")
private Map<String, Integer> totalDownloads;
public Map<String, Integer> getTotalDownloads() {
return totalDownloads;
}
public void setTotalDownloads(Map<String, Integer> totalDownloads) {
this.totalDownloads = totalDownloads;
}
}
那你就可以开始了:
ObjectMapper mapper = new ObjectMapper();
BintrayDownloadCounts downloadCounts = mapper.readValue(json, BintrayDownloadCounts.class);