我有很多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 ..
并且
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
}
现在问题是我只关心财产&#34; e&#34;类型为Array,对String类型属性&#34; e&#34;不感兴趣。所以当它解析时,它会引发异常 无法从VALUE_STRING标记中反序列化java.util.ArrayList的实例 这是预期的,但我希望它只是跳过类型字符串的属性e而不是尝试将其映射到数组类型。
感谢。
答案 0 :(得分:0)
传入的JSON似乎设计得很糟糕,因为它使用常规的String类型和'e'的Object - 大多数OO语言都没有这种组合的真正公共基类型。
因此,您对数据绑定的唯一选择是将e
声明为java.lang.Object
(在这种情况下,它将变为java.lang.String
或java.util.Map
)或{{1 (“JSON树”)。
然后,您需要在绑定后提取数据。
虽然您可以实现自定义反序列化器,但使用JsonNode
或Object
作为初始类型通常更简单,然后处理以后的转换。
例如,您可以使用以下代码将JsonNode
转换为任何其他类型:
JsonNode
或者,如果你愿意的话,只要把东西拿出去
MyValue v = mapper.treeToValue(treeNode, MyValue.class)