Java 如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素
我正在使用Jackson 2库,并尝试反序列化JSON响应,如下所示:Java 如何避免在使用Jackson时从JSON字符串反序列化空JSON数组元素,java,json,jackson,Java,Json,Jackson,我正在使用Jackson 2库,并尝试反序列化JSON响应,如下所示: { "employee": [ {}, { "Details": [ { "Name": "value", "Lastname": "value" } ] } ]} ObjectMapper mapper = new ObjectMapper();
{
"employee": [
{},
{
"Details": [
{
"Name": "value",
"Lastname": "value"
}
]
}
]}
ObjectMapper mapper = new ObjectMapper();
Empoyee[] array = mapper.readValue(json, Empoyee[].class);
由于某些原因,我的employee数组中有一个空元素。在反序列化过程中,是否可以丢弃该元素并避免对其进行反序列化?目前,我的代码将空employee反序列化为带有null字段的employee POJO类
我的代码如下所示:
{
"employee": [
{},
{
"Details": [
{
"Name": "value",
"Lastname": "value"
}
]
}
]}
ObjectMapper mapper = new ObjectMapper();
Empoyee[] array = mapper.readValue(json, Empoyee[].class);
另外,我无法触摸JSON响应。它是什么…首先,请确保您有setter、getter和构造函数,然后, 您可以使用以下选项:
Employee employee = mapper.readValue(yourJson, Employee.class);
希望它能帮助你
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
mapper.setSerializationInclusion(Include.NON_EMPTY);
或
在反序列化过程之后,您需要编写自定义反序列化程序或过滤掉空对象。第二种方法听起来容易得多,因为除了bean的自定义反序列化器之外,您需要扩展已经实现的数组反序列化器com.fasterxml.jackson.databind.desr.std.ObjectArraydSerializer,并过滤掉空bean或空bean 另见:
你的回答用两种不同的方式解决了我的问题。我会接受你的回答作为解决我问题的办法。从第二种方法更容易的事实来看,你能再详细说明一下为什么它更可取吗?我的POJO类中有构造函数。上面的代码创建employee对象。这与反序列化过程中如何丢弃空对象的问题无关。