fastjson如何轉Bean
總結
JSON轉bean 如果 bean中沒有 嵌套帶範型的list集合 則隻需要一次解析
不然需要多次解析 .
不多次解析也不會報錯。隻是别人調用你的接口 用到你bean中的list集合 并取出裡面的資料用的時候會報錯
1.例如 如果一個json中 單純的對應一個bean bean中不嵌套任何的list或map 等
像這樣
@Data
public class ReturnString {
private String code;
private String message;
private String data;
}
可以直接用
ReturnString returnString = JSON.parseObject(s, ReturnString.class);
2.例如 一個json中 嵌套了 帶有範型的list集合
@Data
public class ReturnData<T> {
private String code;
private String message;
private List<T> data;
}
這時需要兩次解析
String response = HttpClientUtil.getResponce(edjConfiguration.getListAllUrl() + "?channel=" + channel + "&sign=" + md51);
ReturnData<customerData> returnData = JSON.parseObject(response, ReturnData.class);//第一次解析
List<customerData> data = JSON.parseArray(JSON.parseObject(response).getString("data"), customerData.class);
returnData.setData(data);//第二次解析
如果隻一次解析 則
List<customerData> data1 = returnData.getData();
System.out.println("data1.get(0).getCustomerId() = " + data1.get(0).getCustomerId());
報錯 取不出來
3.例如一個json中 嵌套了 list集合 明确的不帶範型
@Data
public class DriverData {
private String code;
private String message;
private DriverInfo data;
}
則 可以隻用解析一次
String s = HttpClientUtil.getResponce(edaijiaConfiguration.getDriverInfoUrl() + lj.get(1) + "&sign=" + md51);
DriverData driverData = JSON.parseObject(s, DriverData.class);
可以取出列印
DriverInfo data = driverData.getData();
System.out.println("data.getDriverId() = " + data.getDriverId());
不會和上面帶有範型的需要兩次解析,一次解析報錯.
如果用Gson
裡面有範型 隻用這樣解析一次就行了
@Data
public class ReturnData<T> {
private String code;
private String message;
private List<T> data;
}
Gson gson = new Gson();
ReturnData<customerData> o = gson.fromJson(response, new TypeToken<ReturnData<customerData>>() {}.getType());
List<customerData> data1 = o.getData();
data1.forEach(t->{
System.out.println(t.getCustomerName());
});