json 转换成 带泛型的对象 , 报错问题解决
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
场景
当我们将json转换成带泛型的对象时, 再获取该泛型属性时会报错
java.util.LinkedHashMap cannot be cast to xxx(你的泛型的类型)
解决办法
1 先将该泛型属性的值, 转为json字符串
2 再将该json字符串, 转成泛型的类型
错误演示
// bean 类
public class HttpResult<T> {
private boolean success;
private T result;
private String error;
// get,set ,tostring
}
public static void main(String[] args) throws Exception {
String json = "你的json字符串";
// json转bean
ObjectMapper mapper = new ObjectMapper();
HttpResult<QueryResult> response = mapper.readValue(stockInfoResponseJson, HttpResult.class);
System.out.println(response); // 此时不会报错
System.out.println(response.getResult()); // 此时也不会报错
QueryResult queryResult = response.getResult(); // 此时会报错
}
解决办法演示
public static void main(String[] args) throws Exception {
String json = "你的json字符串";
// json转bean
ObjectMapper mapper = new ObjectMapper();
HttpResult<QueryResult> response = mapper.readValue(stockInfoResponseJson, HttpResult.class);
// 开始解决 报错问题 --------------------------------------
// 泛型 属性 转 json字符串
String conStr= mapper .writeValueAsString(response.getResult());
// json字符串 再转 泛型 属性
QueryResult queryResult = mapper.readValue(conStr, QueryResult.class);
System.out.println(queryResult); // 此时就没问题了
}
json & bean 互转
上述转换过程 , 可以使用下面工具类 JsonUtil 中的 conveterObject 方法来实现
QueryResult queryResult = JsonUtil.conveterObject(response.getResult(), QueryResult.class);
package com.nspark.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Map;
/**
* @Description: json 工具类
* @Author: North Spark
*/
public class JsonUtil {
/**
* 对象转JSON字符串
*/
public static String object2Json(Object obj) {
String result = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
result = objectMapper.writeValueAsString(obj);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @Function: bean 转 map
*/
public static Map object2Map(Object obj) {
String object2Json = object2Json(obj);
Map<?, ?> result = jsonToMap(object2Json);
return result;
}
/**
* JSON字符串转Map对象
*/
public static Map<?, ?> jsonToMap(String json) {
return json2Object(json, Map.class);
}
/**
* JSON转Object对象
*/
public static <T> T json2Object(String json, Class<T> cls) {
T result = null;
try {
ObjectMapper objectMapper = new ObjectMapper();
result = objectMapper.readValue(json, cls);
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
/**
* @Process : 泛型 转 json , json 再转 bean
* @Function: 泛型属性, 转成指定的类
*/
public static <T> T conveterObject(Object srcObject, Class<T> destObjectType) {
String jsonContent = object2Json(srcObject);
return json2Object(jsonContent, destObjectType);
}
}
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献3条内容
所有评论(0)