Java Jackson-忽略数据类型不匹配的属性

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

我有许多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
}
这里,如果您注意到,在第一个“数据”块中,“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(), ...);