Java Jackson-反序列化数组并筛选无效数据

Java Jackson-反序列化数组并筛选无效数据,java,android,list,generics,jackson,Java,Android,List,Generics,Jackson,在一个Android项目中,我们使用Jackson的改造从json REST API获取数据 出于某些技术原因,API可以返回混合了有效数据和无效数据的数组 android应用程序需要获取这些数据并只过滤有效数据 为此,我们想在ObjectMapper中添加一个用于列表类的自定义JsonDeserializer,用于对Json进行反序列化: SimpleModule listModule = new SimpleModule(); listModule.addDeserializ

在一个Android项目中,我们使用Jackson的改造从json REST API获取数据

出于某些技术原因,API可以返回混合了有效数据和无效数据的数组

android应用程序需要获取这些数据并只过滤有效数据

为此,我们想在ObjectMapper中添加一个用于列表类的自定义JsonDeserializer,用于对Json进行反序列化:

    SimpleModule listModule = new SimpleModule();
    listModule.addDeserializer(List.class, new ResilientListJsonDeserializer(null));
    objectMapper.registerModule(listModule);
但是我们没有找到一个解决方案来实现一个JSONDeserializer,它允许我们过滤json数组并检索一个只包含过滤有效数据的列表

由于我们不知道如何构建数组项,我们在路上遇到了障碍。下面是我们当前的JsonDeserializer:

public class MyJsonDeserializer extends JsonDeserializer<List> {

    @Override
    public List deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {

        final ObjectMapper mapper = (ObjectMapper) p.getCodec();

        final JsonNode node = mapper.readTree(p);

        List<Object> result = new ArrayList<>();

        Iterator<JsonNode> iterator = node.elements();

        while (iterator.hasNext()) {
            JsonNode childNode = iterator.next();

            try {
                Object obj = mapper.convertValue(childNode, ????); // How to get class type of the current parsed objet ?
                result.add(obj);
            }catch(IllegalArgumentException e) {
                Log.e(TAG, "impossible to parse json", e);
            }
        }

        return result;
    }
}
公共类MyJsonDeserializer扩展JsonDeserializer{
@凌驾
公共列表反序列化(JSONP,反序列化上下文ctxt)引发IOException{
final ObjectMapper mapper=(ObjectMapper)p.getCodec();
final-JsonNode=mapper.readTree(p);
列表结果=新建ArrayList();
迭代器迭代器=node.elements();
while(iterator.hasNext()){
JsonNode-childNode=iterator.next();
试一试{
Object obj=mapper.convertValue(childNode,??);//如何获取当前解析的对象的类类型?
结果:添加(obj);
}捕获(IllegalArgumentException e){
e(标记“不可能解析json”,e);
}
}
返回结果;
}
}
也许您有解决方案或其他方法来解决使用Jackson从反序列化数组中筛选值的问题:)

提前感谢您的反馈