首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用对象映射程序从JsonNode返回泛型列表?

使用对象映射程序从JsonNode返回泛型列表?
EN

Stack Overflow用户
提问于 2019-12-14 15:31:32
回答 2查看 1.4K关注 0票数 1

我有以下代码,它从一个list返回一个strings

代码语言:javascript
复制
   public static List<String> asList(final JsonNode jsonNode) {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.convertValue(jsonNode, ArrayList.class);
    }

示例用法:

代码语言:javascript
复制
 List<String> identities = Utils.asList(jsonNode);

我希望将此更改为使用Generics,以确保JsonNode包含任何类型的列表也可以转换和返回。

我有以下实现(不是使用Jackson ObjectMapper),但这是最佳解决方案吗?

代码语言:javascript
复制
public static <T> List<T> asList(final JsonNode jsonNode) {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.convertValue(jsonNode, ArrayList.class);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-14 16:02:20

您可以创建接受JSON字符串和TypeReference的util方法。

代码语言:javascript
复制
public <T> T jsonMapper(String json, TypeReference<T> typeReference)
        throws JsonParseException, JsonMappingException, IOException {
    return objectMapper.readValue(json, typeReference);
}

例如,可以调用此方法将json字符串转换为List或单个Object

代码语言:javascript
复制
List<String> lOfStr = jsonMapper(json,new TypeReference<List<String>>() { });
Employee emp = jsonMapper(json,new TypeReference<Employee>() { });
票数 2
EN

Stack Overflow用户

发布于 2019-12-14 15:49:58

要避免未检查的赋值,可以使用TypeReference

代码语言:javascript
复制
public static <T> List<T> asList(final JsonNode jsonNode) {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.convertValue(jsonNode, new TypeReference<List<T>>() {});
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59336513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档