首页 > 解决方案 > ObjectNode 对象读取列表值

问题描述

我有一个类似这样的 JSON 响应:

{
  "id_list":["123", "456", "789"],
  ...
}

我想知道如果我想使用 ObjectNode 来读取这样的 id 列表并返回一个 id 列表,例如,我应该怎么做。

我试着这样做:

List<String> sendBookIds = asStream(objectMapper.readValue(on.get("bookIds"), new TypeReference<List<String>>(){}))
                .map(JsonNode::asText)
                .flatMap(bookIds -> idResolver.fetchBookIds(bookIds).stream())
                .distinct()
                .collect(Collectors.toList());

但我有这个错误:

Cannot resolve method 'readValue(com.fasterxml.jackson.databind.JsonNode, anonymous com.fasterxml.jackson.core.type.TypeReference<java.util.List<java.lang.String>>

任何人都知道是否有一个神奇的缺失命令?如果没有,那么解决方案是什么?

标签: javajackson

解决方案


您可以"id_list"在节点中读取您的属性,JsonNode然后使用自定义ObjectReader阅读器将其反序列化为List<String>列表:

JsonNode node = mapper.readTree(json).get("id_list");
ObjectReader reader = mapper.readerFor(new TypeReference<List<String>>(){});
//the list will be ["123", "456", "789"]
List<String> idList = reader.readValue(node); 

推荐阅读