杰克逊 - 反序列化数组并过滤无效数据

时间:2016-08-03 20:09:46

标签: java android list generics jackson

在Android项目中,我们使用Retrofit和Jackson从json REST API中获取数据。

由于某些技术原因,API可以返回包含有效数据和无效数据的数组。

Android应用程序需要获取这些数据并仅过滤有效数据。

为此,我们有想法为List类添加一个自定义的JsonDeserializer,用于Retrofit用于反序列化Json的ObjectMapper:

    SimpleModule listModule = new SimpleModule();
    listModule.addDeserializer(List.class, new ResilientListJsonDeserializer(null));
    objectMapper.registerModule(listModule);

但我们找不到实现JsonDeserilizer的解决方案,它允许我们过滤json数组并检索只包含过滤有效数据的List。

由于我们不知道如何构建数组项目,因此我们被封锁了。这是我们当前的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;
    }
}

也许你有解决方案或其他方法来解决使用杰克逊从反序列化数组中过滤值的问题:)

提前感谢您的反馈。

0 个答案:

没有答案