分享一个坑:
在fastJSON解析多层泛型对象的时候,使用方式如下:
ApiResponse<CoinCostRecordResponse> response = JSON.parseObject(data, new TypeReference<ApiResponse<CoinCostRecordResponse>>(){});
这样解析的时候,response.getData()返回的结果是一个CoinCostRecordResponse对象,能够进行深层解析。
把这个方法提炼出来的时候(jsonData是一个ApiResponse的json串):
public <T> T getObjFromJson(String jsonData){
return JSON.parseObject(jsonData, new TypeReference<ApiResponse<T>>(){}).getData();
}
以上方法是报异常的,因为FastJson无法处理里面的泛型<T>,解析出来的getData是一个JSONObject,所以需要对JSONObject重新解析,修改后:
public <T> T getObjFromJson(String jsonData, Class<T> cls){
JSONObject obj = JSON.parseObject(jsonData, new TypeReference<ApiResponse<T>>(){}).getData();
return JSONObject.getJavaObject(obj, cls);
}
在fastJSON解析多层泛型对象的时候,使用方式如下:
ApiResponse<CoinCostRecordResponse> response = JSON.parseObject(data, new TypeReference<ApiResponse<CoinCostRecordResponse>>(){});
这样解析的时候,response.getData()返回的结果是一个CoinCostRecordResponse对象,能够进行深层解析。
把这个方法提炼出来的时候(jsonData是一个ApiResponse的json串):
public <T> T getObjFromJson(String jsonData){
return JSON.parseObject(jsonData, new TypeReference<ApiResponse<T>>(){}).getData();
}
以上方法是报异常的,因为FastJson无法处理里面的泛型<T>,解析出来的getData是一个JSONObject,所以需要对JSONObject重新解析,修改后:
public <T> T getObjFromJson(String jsonData, Class<T> cls){
JSONObject obj = JSON.parseObject(jsonData, new TypeReference<ApiResponse<T>>(){}).getData();
return JSONObject.getJavaObject(obj, cls);
}