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());
});