Java Jackson-忽略数据类型不匹配的属性
我有许多JSON文件,我正在使用Jackson解析这些文件。 我的JSON的一部分看起来像Java Jackson-忽略数据类型不匹配的属性,java,json,jackson,Java,Json,Jackson,我有许多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
"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
}
这里,如果您注意到,在第一个“数据”块中,“e”的类型是字符串,而在第二个块中,类型是数组。我只关心第二种类型的“e”,即数组,因此我制作了如下POJO bean-
Class data.java
...
@JsonProperty("e")
private List<MouseDataArray> e = new ArrayList<MouseDataArray>();
some more properties .. and getters and setters ..
现在的问题是,我只关心数组类型的属性“e”,而对字符串类型的属性“e”不感兴趣。所以当它解析时,它会通过异常
无法反序列化java.util.ArrayList的实例,该实例的值\u字符串标记
这是预期的,但我希望它跳过string类型的属性e,而不是尝试将其映射到数组类型
谢谢。看来传入的JSON设计得很糟糕,因为它同时使用常规字符串类型和对象作为“e”——大多数OO语言都没有真正的通用基类型用于这种组合。 因此,数据绑定的唯一赌注是将
e
声明为java.lang.Object
(在这种情况下,它将变成java.lang.String
或java.util.Map
),或JsonNode
(“JSON树”)。
然后需要在绑定后提取数据
虽然可以实现自定义反序列化器,但通常更简单的方法是只使用对象
或JsonNode
作为初始类型,然后处理以后的转换。
例如,您可以通过以下操作将JsonNode
转换为任何其他类型:
MyValue v = mapper.treeToValue(treeNode, MyValue.class)
或者,如果你愿意的话,把东西拿出来
JsonNode first = treeNode.get(0);
MyValue v = new MyValue(first.get("x").asInt(), ...);
为此,您可以扩展并使用自己的
JsonDeserializer
。我不熟悉编写自定义反序列化程序,您能指出一些参考资料吗?谢谢
JsonNode first = treeNode.get(0);
MyValue v = new MyValue(first.get("x").asInt(), ...);