[英]Jackson - Ignore properties whose data type does not match
我有许多JSON文件,我正在使用Jackson进行解析。 所以我的JSON的一部分看起来像
"data": {
"k": "ewt",
"e": "dwpc",
"d": 2,
"ex": 0,
"t": 3439
}
"data": {
"k": "mmm1",
"e": [{
"x": 548,
"y": 330,
"t": 35733
}, {
"x": 541,
"y": 342,
"t": 36354
}],
"min": 0,
"max": 0,
"avg": 0
}
在这里,如果iyou注意到,在第一个“数据”块中,类型“ e”是字符串,在第二个中,类型是Array。 我只关心数组的第二种类型“ e”,因此我按如下方式制作了POJO bean:
Class data.java
...
@JsonProperty("e")
private List<MouseDataArray> e = new ArrayList<MouseDataArray>();
some more properties .. and getters and setters ..
和
Class MouseDataArray.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"x",
"y",
"t"
})
public class MouseDataArray {
@JsonProperty("x")
private Long x;
@JsonProperty("y")
private Long y;
@JsonProperty("t")
private Long t;
.. getters and setters
}
现在的问题是,我只关心数组类型的属性“ e”,而不关心字符串类型的属性“ e”。 因此,在解析时,它会引发异常。 无法从VALUE_STRING令牌中反序列化java.util.ArrayList的实例 ,但是我希望它仅跳过字符串类型的属性e而不是尝试将其映射为Array类型。
谢谢。
传入的JSON似乎设计不好,因为它同时使用常规String类型和Object作为'e'-大多数OO语言对于这种组合都没有真正的通用基类型。 因此,唯一的数据绑定选择是将e
声明为java.lang.Object
(在这种情况下,它将成为java.lang.String
或java.util.Map
)或JsonNode
(“ JSON树”) 。 然后,您需要在绑定后提取数据。
尽管可以实现自定义反序列化器,但通常更简单的方法是只使用Object
或JsonNode
作为初始类型,然后再处理以后的转换。 例如,您可以使用以下方法将JsonNode
转换为任何其他类型:
MyValue v = mapper.treeToValue(treeNode, MyValue.class)
或者,如果您愿意,只要
JsonNode first = treeNode.get(0);
MyValue v = new MyValue(first.get("x").asInt(), ...);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.