使用杰克逊

时间:2020-06-19 03:02:37

标签: jackson deserialization marshalling unmarshalling jackson-databind

我有一个像这样的json字符串

{"jobs":[{"id":"1","state":"Visited","runTime":6224,"finalJobAssignment":{"owner":"10.107.181.236:5363",
"resourceId":"11",
"listingPositions":["11"]},"keys":1765624,"range":{"startPrefix":"aa",
"endPrefix":"bb"},"resources":[{"resourceId":"11"}]},{"id":"2","state":"Visited","runTime":6224,"finalJobAssignment":{"owner":"10.107.181.236:5363",
"resourceId":"22",
"listingPositions":["22","33"]},"keys":1765624,"range":{"startPrefix":"cc",
"endPrefix":"dd"},"resources":[{"resourceId":"22"}]}]}

我试图使用自定义反序列化器反序列化,我只需要json数组中的resourceId,startPrefix,endPrefix和listingPositions(这是一个列表),如何摆脱“ jobs”并返回我的自定义对象的列表?

自定义对象只有上面有用的字段

目前我有这样的东西

private List<AuditEntry> deserialize(final JsonNode node,
                                         final DeserializationContext deserializationContext) throws IOException {
        List<AuditEntry> res =  new ArrayList<>();
        Iterator<JsonNode> iterator = node.get(JOBS_KEY).elements();
        while (iterator.hasNext()) {
            JsonNode jsonNode = iterator.next();
            final String startKey = jsonNode.get(RANGE_KEY).get(START_PREFIX_KEY).asText();
            final String endKey = jsonNode.get(RANGE_KEY).get(END_PREFIX_KEY).asText();
            final String partitionId;
            final String resourceId;
            final List<JournalChapterAndSN> listingPositions;
            final JsonParser listingPositionsParser;


                resourceId = jsonNode.get(FINAL_JOB_ASSIGNMENT_KEY).get(RESOURCE_ID_KEY).asText();

                listingPositionsParser = jsonNode.get(FINAL_JOB_ASSIGNMENT_KEY).get(LISTING_POSITIONS_KEY).traverse();

                listingPositionsParser.nextToken();

                List<String> listingPositionsString = deserializationContext.readValue(listingPositionsParser, List.class);

                }
            }

            res.add(new AuditEntry(range, partitionId, listingPositions));

        }
        return res;


    }

但是,当处理listingPositionString时,DeserializationContext似乎使用的是我的自定义解串器,而不是默认的解串器,从而导致npe,我该如何解决呢?

0 个答案:

没有答案