使用对象映射器从 JsonNode 返回通用列表?

Returning a Generic list from JsonNode using an Object Mapper?

我有以下代码 returns 来自 JsonNodelist of strings:

   public static List<String> asList(final JsonNode jsonNode) {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.convertValue(jsonNode, ArrayList.class);
    }

用法示例:

 List<String> identities = Utils.asList(jsonNode);

我想改成使用Generics来保证一个JsonNode包含任意Type的列表也可以转换返回。

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

public static <T> List<T> asList(final JsonNode jsonNode) {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.convertValue(jsonNode, ArrayList.class);
}

为避免未经检查的分配,您可以使用 TypeReference:

public static <T> List<T> asList(final JsonNode jsonNode) {
    ObjectMapper mapper = new ObjectMapper();
    return mapper.convertValue(jsonNode, new TypeReference<List<T>>() {});
}

您可以创建一个接受 JSON 字符串和 TypeReference

的 util 方法
public <T> T jsonMapper(String json, TypeReference<T> typeReference)
        throws JsonParseException, JsonMappingException, IOException {
    return objectMapper.readValue(json, typeReference);
}

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

List<String> lOfStr = jsonMapper(json,new TypeReference<List<String>>() { });
Employee emp = jsonMapper(json,new TypeReference<Employee>() { });