使用对象映射器从 JsonNode 返回通用列表?
Returning a Generic list from JsonNode using an Object Mapper?
我有以下代码 returns 来自 JsonNode
的 list
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>() { });
我有以下代码 returns 来自 JsonNode
的 list
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
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>() { });