【发布时间】:2015-11-18 16:29:06
【问题描述】:
我想将下面的 JSON 解析成 POJO。我正在使用jackson来解析json。
{
"totalSize": 4,
"done": true,
"records": [
{
"attributes": {
"type": "oppor",
"url": "/service/oppor/456"
},
"AccountId": "123",
"Id": "456",
"ProposalID": "103"
}
]
}
在上面的 JSON 中,字段“totalSize”、“done”、“records”和“attributes”是已知字段。而“AccountId”、“Id”和“ProposalID”是未知字段。在上面的 JSON 中,我不需要“属性”成为我的 bean 对象的一部分。
这是我的 JSON 的等效 bean 类
public class Result {
private int totalSize;
private boolean done;
private List<Map<String, String>> records;
public int getTotalSize() {
return totalSize;
}
public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
}
public boolean isDone() {
return done;
}
public void setDone(boolean done) {
this.done = done;
}
public List<Map<String,String>> getRecords() {
return records;
}
public void setRecords(List<Map<String, String>> records) {
this.records = records;
}
}
因此,我刚刚使用 List 获取 bean 中的 results 元素的 records 元素中有未知字段。在这张地图中,我不想要“属性”字段。解析时如何忽略这一点? 下面是我得到的例外,因为属性不是字符串元素。
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
at [Source: [B@66fdec9; line: 1, column: 40] (through reference chain: com.sample.json.Result["records"])
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:164)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:691)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:46)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:430)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:312)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:227)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:204)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23)
【问题讨论】:
-
看stackoverflow.com/a/7272468/492884。类似的东西应该可以工作。
-
@i_v_harish - 引用的答案是将 java 对象转换为 JSON。在这种情况下,我可以使用
@JsonProperty注释。但对我来说,我需要从 JSON 获取 java 对象,并且我想忽略 JSON 字段