1. 程式人生 > >json字串轉化為java物件(一)

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的轉化,其他情況不保證有效。