json字符串转化为java对象(一)

来源:互联网 发布:js 是否数字 编辑:程序博客网 时间:2024/06/05 12:06

适合情况:不是一般的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的转化,其他情况不保证有效。