json字串轉化為java物件(一)
適合情況:不是一般的java類(也就是說,屬性都是基本型別的稱為一般的Java類),屬性裡含有集合,且集合資料為引用型別
所需jar包:net.sf.json
情景如下:
json字串:
{"flag":1,"msg":"Success","tp":1508488247,"sign":"f1c9e27f8c7b8c83faf86026121b9088",
"dataArray":[{"channel":"測試推廣方式1","day":"2017-09-01","campaign":"測試推廣活動","type":3,"price":100,"zcCount":2500,"jjCount":1800,"khCount":600,"dyCount":450000,"income":60000,"pv":980660,"uv":120972},
{"channel":"測試推廣方式2","day":"2017-09-01","campaign":"測試推廣活動","type":3,"price":100,"zcCount":500,"jjCount":120,"khCount":60,"dyCount":60000,"income":6000,"pv":80660,"uv":20972},
{"channel":"測試推廣方式3","day":"2017-09-01","campaign":"測試推廣活動","type":3,"price":100,"zcCount":6500,"jjCount":9800,"khCount":1800,"dyCount":7350000,"income":180000,"pv":98210660,"uv":12092372}]}
所需轉化的類:
public class ReqMessage<T> extends Base {
/**結果狀態碼*/
private Integer flag;
/**錯誤原因*/
private String msg;
/**時間戳*/
private String tp;
/**校驗碼*/
private String sign;
/** 當flag==1時,推廣方式的業績資料 */
private List<T> dataArray;
public Integer getFlag() {
return flag;
}
public void setFlag(Integer flag) {
this.flag = flag;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getTp() {
return tp;
}
public void setTp(String tp) {
this.tp = tp;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public List<T> getDataArray() {
return dataArray;
}
public void setDataArray(List<T> dataArray) {
this.dataArray = dataArray;
}
@Override
public String toString() {
return "ReqMessage{" +
"flag=" + flag +
", msg='" + msg + '\'' +
", tp='" + tp + '\'' +
", sign='" + sign + '\'' +
", dataArray=" + dataArray +
'}';
}
}
轉化程式碼:
/**json轉化為物件*/
private ReqMessage<ZhongYinChannel> parseJson(String json){
JSONObject jsonObject = JSONObject.fromObject(json);
Map<String,Class> map = new HashMap<>();
map.put("dataArray",ZhongYinChannel.class);
ReqMessage<ZhongYinChannel> req = (ReqMessage<ZhongYinChannel>)JSONObject.toBean(jsonObject,ReqMessage.class,map);
return req;
}
提示:T必須為引用型別,我這裡的ZhongYinChannel中的屬性都是基本型別,其實裡面也可以巢狀集合型別,只需將集合中資料的型別,指定到map中即可,我這裡只嘗試了這種型別json的轉化,其他情況不保證有效。