1. 程式人生 > >java解析json資料(前臺json資料封裝後臺springmvc解析)

java解析json資料(前臺json資料封裝後臺springmvc解析)

業務:前臺ajax傳遞json物件形式,json物件陣列形式資料,傳遞後臺,解析json資料

開發環境:eclipse4.5+mave3.3+mysql5.7+tomcat7+jdk1.7

開發技術:springmvc+spring+mybatis+js+jquery+jsp

jar包:

<dependency>
         <groupId>com.alibaba</groupId>
         <artifactId>fastjson</artifactId>
         <version>1.2.3</version>
</dependency>

1.前臺js封裝json資料案例:

//修改模板廣告資料(物件陣列形式json資料)
var modifyChannelAdverArr = [];
//樓層廣告資料
for(var i=0;i<$("#floorsConRight_ad_box .floorAdverId").length;i++){
  if($($("#floorsConRight_ad_box .floorAdverId")[i]).html()!=""){
    var channelAdverId = $($("#floorsConRight_ad_box .floorAdverId")[i]).html();
    var adverName = $($("#floorsConRight_ad_box .floorAdverId")[i]).parent().find(".adverName").val();
    var adverPath = $($("#floorsConRight_ad_box .floorAdverId")[i]).parent().find(".adverPath").val();
    var adverHref = $($("#floorsConRight_ad_box .floorAdverId")[i]).parent().find(".imgLink").val();
    var adverSort = $($("#floorsConRight_ad_box .floorAdverId")[i]).parent().find(".floorAdverSort").val();                           
modifyChannelAdverArr.push({"adverFlag":"1","floorId":channelStoreyId,"atId":"161","adverType":"151","temp3":"0","temp5":"0","channelAdverId":channelAdverId,"adverName":adverName,"adverPath":adverPath,"adverHref":adverHref,"adverSort":adverSort});
  }
}
//物件形式json資料
var jsonData={"id":1,"tag":"稚優泉","productId":5534,"productName":"六色眼影"};
var data = {} ;
data["modifyChannelAdverArr"] = modifyChannelAdverArr;
data["jsonData"]=jsonData;
$.ajax({
 type: "POST",
 url: "serveTempStoreyAjax.htm",
 data: JSON.stringify(data),
 contentType : "application/json;charsetset=UTF-8",
 dataType:"json",
 cache: true,
 async: false,
 error: function (request) {
    showTipAlert("連線錯誤!");
 },
 success: function (data) {
   if (data == 1) {
      //serveyouLike();
      showTipAlert("操作成功!");
      $("#cancelfloorsEdit").click();
   } else {
       showTipAlert("操作失敗!");
   }
 }
});

2.後臺接受引數:

@RequestMapping("/serveTempStoreyAjax")
@ResponseBody
public int serveTempStoreyAjax(HttpServletRequest request, HttpServletResponse response,@RequestBody JSONObject obj) {
    	int count=0;
    	try {
    		count=storeyService.operateTempStoreyAjax(request, obj);
	    } catch (Exception e) {
			e.printStackTrace();
			LOGGER.error("操作模板樓層失敗"+e.getMessage(),e);
		}
    	//返回結果1成功0失敗
        return count;
}
3.測試方法:
//測試
public static void main(String[] args) {
	//json資料格式為物件形式:{}
	String jsonData1="{\"modifyTempStoreArr\":"
	+ "{\"floorId\":\"2\",\"goodsCatId\":\"5768\",\"channelStoreyId\":\"256\",\"storeyImg\":\"http://qjnanjing.oss-cn-shanghai.aliyuncs.com/qj_nanjing/1504176460708.jpg\",\"storeyImgHref\":\"www.baidu.com\",\"storeyName\":\"精品服飾\"}"
	+ "}";
	//json資料格式為物件陣列形式: [{},{}]
	String jsonData2="{\"modifyChannelAdverArr\":["
	+ "{\"floorId\":\"256\",\"adverHref\":\"\",\"temp3\":\"0\",\"adverType\":\"151\",\"adverFlag\":\"2\",\"adverSort\":\"1\",\"adverPath\":\"http://qjnanjing.oss-cn-shanghai.aliyuncs.com/qj_nanjing/1492671908992.jpg\",\"adverName\":\"1\",\"atId\":\"161\",\"channelAdverId\":\"2517\",\"temp5\":\"0\"},"
	+ "{\"floorId\":\"256\",\"adverHref\":\"\",\"temp3\":\"0\",\"adverType\":\"151\",\"adverFlag\":\"2\",\"adverSort\":\"2\",\"adverPath\":\"http://qjnanjing.oss-cn-shanghai.aliyuncs.com/qj_nanjing/1492671908992.jpg\",\"adverName\":\"2\",\"atId\":\"161\",\"channelAdverId\":\"2518\",\"temp5\":\"0\"}"
	+ "]}";
		
	//首先將json字串轉為為json物件
	JSONObject json1 = JSON.parseObject(jsonData1);
	JSONObject json2 = JSON.parseObject(jsonData2);
	System.out.println("json1:"+json1.toJSONString());
	System.out.println("json2:"+json2.toJSONString());
		
	//然後通過key名稱獲得值
	JSONObject object=json1.getJSONObject("modifyTempStoreArr");
	JSONArray array2=json2.getJSONArray("modifyChannelAdverArr");
	System.out.println("object:"+object.toJSONString());
	System.out.println("array2:"+array2.toJSONString());
		
	//解析json資料
	//方法一:
	String storeyName=object.getString("storeyName");
	Long goodsCatId=object.getLong("goodsCatId");
	String storeyImg=object.getString("storeyImg");
	String storeyImgHref=object.getString("storeyImgHref");
	Integer floorIds=object.getInteger("floorId");
	Long channelStoreyId=object.getLong("channelStoreyId");
	System.out.println("storeyName:"+storeyName);
	System.out.println("goodsCatId:"+goodsCatId);
	System.out.println("storeyImg:"+storeyImg);
	System.out.println("storeyImgHref:"+storeyImgHref);
	System.out.println("floorId:"+floorIds);
	System.out.println("channelStoreyId:"+channelStoreyId);
		
	for(int i=0;i<array2.size();i++){
		String adverName=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getString("adverName");
		String adverPath=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getString("adverPath");
		String adverHref=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getString("adverHref");
		Integer adverSort=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getInteger("adverSort");
		Integer adverFlag=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getInteger("adverFlag");
		Long floorId=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getLong("floorId");
		Long atId=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getLong("atId");
		Long adverType=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getLong("adverType");
		String temp3=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getString("temp3");
		String temp5=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getString("temp5");
		Long channelAdverId=JSONObject.parseObject(JSONObject.toJSONString(array2.get(i))).getLong("channelAdverId");
		System.out.println("adverName:"+adverName);
		System.out.println("adverPath:"+adverPath);
		System.out.println("adverHref:"+adverHref);
		System.out.println("adverSort:"+adverSort);
		System.out.println("adverFlag:"+adverFlag);
		System.out.println("floorId:"+floorId);
		System.out.println("atId:"+atId);
		System.out.println("adverType:"+adverType);
		System.out.println("temp3:"+temp3);
		System.out.println("temp5:"+temp5);
		System.out.println("channelAdverId:"+channelAdverId);
	}
		
	//方法二:
	//{ }說明它是一個物件! 用 JSON.parseObject 
	ChannelStorey channelStorey=JSON.parseObject(object.toJSONString(),ChannelStorey.class);
	System.out.println("storeyName2:"+channelStorey.getStoreyName());
	System.out.println("goodsCatId2:"+channelStorey.getGoodsCatId());
	System.out.println("storeyImg2:"+channelStorey.getStoreyImg());
	System.out.println("storeyImgHref2:"+channelStorey.getStoreyImgHref());
	System.out.println("floorId2:"+channelStorey.getFloorId());
	System.out.println("channelStoreyId2:"+channelStorey.getChannelStoreyId());
	//[{},{}]說明是一個物件陣列,用JSON.parseArray
	List<ChannelAdver> channelAdverList = JSON.parseArray(array2.toJSONString(),ChannelAdver.class);
	for(int i=0;i<channelAdverList.size();i++){
		System.out.println("adverName2:"+channelAdverList.get(i).getAdverName());
		System.out.println("adverPath2:"+channelAdverList.get(i).getAdverPath());
		System.out.println("adverHref2:"+channelAdverList.get(i).getAdverHref());
		System.out.println("adverSort2:"+channelAdverList.get(i).getAdverSort());
		System.out.println("adverFlag2:"+channelAdverList.get(i).getAdverFlag());
		System.out.println("floorId2:"+channelAdverList.get(i).getFloorId());
		System.out.println("atId2:"+channelAdverList.get(i).getAtId());
		System.out.println("adverType2:"+channelAdverList.get(i).getAdverType());
		System.out.println("temp3-2:"+channelAdverList.get(i).getTemp3());
		System.out.println("temp5-2:"+channelAdverList.get(i).getTemp5());
		System.out.println("channelAdverId2:"+channelAdverList.get(i).getChannelAdverId());
	}
		
		
}

上訴測試方法裡面實體物件:

ChannelStorey:

package com.qianjiang.channel.bean;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
 * 實體類-頻道樓層
 * 
 */
public class ChannelStorey implements Serializable{


    private static final long serialVersionUID = 1094593262511040855L;
    /** 頻道樓層編號 */
    private Long channelStoreyId;
    /** 頻道樓層名稱 */
    @NotNull
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+")
    private String storeyName;
    /** 頻道ID */
    private Long channelId;
    /** 頻道模板ID */
    private Long tempId;
    /** 頻道樓層層數 */
    private Integer floorId;
    /** 頻道樓層圖片地址 */
    @Pattern(regexp = "[^\\<\\>]+|()")
    private String storeyImg;
    /** 頻道樓層圖片連結地址 */
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+|()")
    private String storeyImgHref;
    /** 頻道樓層SEO */
    private String storeySeo = "";
    /** 頻道樓層商品分類ID */
    private Long goodsCatId;
    /** 是否顯示樓層圖片 0:不顯示 1:顯示 */
    private String showImg;
    /** 是否顯示熱銷排行 0:不顯示 1:顯示 */
    private String showHotRecommend;
    /** 是否顯示樓層廣告 0:不顯示 1:顯示 */
    private String showAdver;
    /** 是否顯示樓層標籤 0:不顯示 1:顯示 */
    private String showTag;
    /** 是否顯示樓層品牌 0:不顯示 1:顯示 */
    private String showTrademark;
    /** 是否顯示樓層佈告板 0:不顯示 1:顯示 */
    private String showBillboard;
    /** 是否顯示樓層分類的子分類 0:不顯示 1:顯示 */
    private String showChildCate;
    /** 是否啟用 0:不啟用; 1:啟用 */
    private String userStatus;
    /** 是否刪除 0:未刪除 1:已刪除 */
    private String delflag;
    /** 建立人ID */
    private Long createUserId;
    /** 建立時間 */
    private Date createDate;
    /** 修改人ID */
    private Long updateUserId;
    /** 修改時間 */
    private Date updateDate;
    /** 備用欄位1 第三方ID */
    private String temp1;
    /** 備用欄位2 樓層右側導航圖片 */
    @Pattern(regexp = "[^\\<\\>]+|()")
    private String temp2;
    /** 備用欄位3 */
    private String temp3;
    /** 備用欄位4 */
    private String temp4;
    /** 備用欄位5 */
    private String temp5;

    public Long getChannelStoreyId() {
        return channelStoreyId;
    }

    public void setChannelStoreyId(Long channelStoreyId) {
        this.channelStoreyId = channelStoreyId;
    }

    public String getStoreyName() {
        return storeyName;
    }

    public void setStoreyName(String storeyName) {
        this.storeyName = storeyName;
    }

    public Long getChannelId() {
        return channelId;
    }

    public void setChannelId(Long channelId) {
        this.channelId = channelId;
    }

    public Long getTempId() {
        return tempId;
    }

    public void setTempId(Long tempId) {
        this.tempId = tempId;
    }

    public Integer getFloorId() {
        return floorId;
    }

    public void setFloorId(Integer floorId) {
        this.floorId = floorId;
    }

    public String getStoreyImg() {
        return storeyImg;
    }

    public void setStoreyImg(String storeyImg) {
        this.storeyImg = storeyImg;
    }

    public String getStoreyImgHref() {
        return storeyImgHref;
    }

    public void setStoreyImgHref(String storeyImgHref) {
        this.storeyImgHref = storeyImgHref;
    }

    public String getStoreySeo() {
        return storeySeo;
    }

    public void setStoreySeo(String storeySeo) {
        this.storeySeo = storeySeo;
    }

    public Long getGoodsCatId() {
        return goodsCatId;
    }

    public void setGoodsCatId(Long goodsCatId) {
        this.goodsCatId = goodsCatId;
    }

    public String getShowImg() {
        return showImg;
    }

    public void setShowImg(String showImg) {
        this.showImg = showImg;
    }

    public String getShowHotRecommend() {
        return showHotRecommend;
    }

    public void setShowHotRecommend(String showHotRecommend) {
        this.showHotRecommend = showHotRecommend;
    }

    public String getShowAdver() {
        return showAdver;
    }

    public void setShowAdver(String showAdver) {
        this.showAdver = showAdver;
    }

    public String getShowTag() {
        return showTag;
    }

    public void setShowTag(String showTag) {
        this.showTag = showTag;
    }

    public String getShowTrademark() {
        return showTrademark;
    }

    public void setShowTrademark(String showTrademark) {
        this.showTrademark = showTrademark;
    }

    public String getShowBillboard() {
        return showBillboard;
    }

    public void setShowBillboard(String showBillboard) {
        this.showBillboard = showBillboard;
    }

    public String getShowChildCate() {
        return showChildCate;
    }

    public void setShowChildCate(String showChildCate) {
        this.showChildCate = showChildCate;
    }

    public String getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(String userStatus) {
        this.userStatus = userStatus;
    }

    public String getDelflag() {
        return delflag;
    }

    public void setDelflag(String delflag) {
        this.delflag = delflag;
    }

    public Long getCreateUserId() {
        return createUserId;
    }

    public void setCreateUserId(Long createUserId) {
        this.createUserId = createUserId;
    }

    /**
     * 時間
     * @return Date
     */
    public Date getCreateDate() {
        if (this.createDate != null) {
            return new Date(this.createDate.getTime());
        } else {
            return null;
        }
    }

    /**
     * 時間
     * @param createDate
     */
    public void setCreateDate(Date createDate) {
        if (createDate != null) {
            Date tEmp = (Date) createDate.clone();
            if (tEmp != null) {
                this.createDate = tEmp;
            }
        }
    }

    public Long getUpdateUserId() {
        return updateUserId;
    }

    public void setUpdateUserId(Long updateUserId) {
        this.updateUserId = updateUserId;
    }

    /**
     * 時間
     * @return Date
     */
    public Date getUpdateDate() {
        if (this.updateDate != null) {
            return new Date(this.updateDate.getTime());
        } else {
            return null;
        }
    }

    /**
     * 時間
     * @param updateDate
     */
    public void setUpdateDate(Date updateDate) {
        if (updateDate != null) {
            Date tEmp = (Date) updateDate.clone();
            if (tEmp != null) {
                this.updateDate = tEmp;
            }
        }
    }

    public String getTemp1() {
        return temp1;
    }

    public void setTemp1(String temp1) {
        this.temp1 = temp1;
    }

    public String getTemp2() {
        return temp2;
    }

    public void setTemp2(String temp2) {
        this.temp2 = temp2;
    }

    public String getTemp3() {
        return temp3;
    }

    public void setTemp3(String temp3) {
        this.temp3 = temp3;
    }

    public String getTemp4() {
        return temp4;
    }

    public void setTemp4(String temp4) {
        this.temp4 = temp4;
    }

    public String getTemp5() {
        return temp5;
    }

    public void setTemp5(String temp5) {
        this.temp5 = temp5;
    }
}

ChannelAdver:

package com.qianjiang.channel.bean;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
 * 實體類-頻道廣告
 * 
 */
public class ChannelAdver implements Serializable
{
    /**
	 * 序列號
	 */
	private static final long serialVersionUID = -5581190573581904835L;
	/*
     * 頻道廣告ID
     */
    private Long channelAdverId;
    /**
     * 頻道ID
     */
    private Long channelId;
    /**
     * 模板ID
     */
    private Long tempId;
    /**
     * 樓層ID
     */
    private Long floorId;
    /** 樓層標籤ID */
    private Long floorTagId;
    /** 廣告標題 */
    @NotNull
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+")
    private String adverName;
    /** 廣告圖片路徑 */
    @Pattern(regexp = "[^\\<\\>]+|()")
    private String adverPath;
    /** 廣告連結 */
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+|()")
    private String adverHref;
    /**
     * 廣告分類-關聯絡統字典表的廣告分類 <br/>
     * 157:輪播大圖片 159:輪播小圖片 161:首頁圖片
     */
    private Long atId;
    /** 廣告排序 */
    private Integer adverSort;
    /**
     * 廣告型別-關聯絡統字典表的廣告型別<br/>
     * 151:頻道廣告
     */
    private Long adverType;
    /** 是否啟用 */
    private String userStatus;
    /** 廣告描述 */
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+|()")
    private String des;

    private String delflag;

    private Long createUserId;

    private Date createDate;

    private Long updateUserId;

    private Date updateDate;
    /** 分類導航ID */
    private String temp1;
    /** 副標題 */
    @Pattern(regexp = "[^''\\[\\]\\<\\>?\\\\!]+|()")
    private String temp2;
    /** 是否分類導航父框廣告 */
    private String temp3;
    /** 第三方ID */
    private String temp4;

    private String temp5;
    
    /** 廣告總標題 */
    private String adverTitle;
    
    /** 頻道廣告標識1普通廣告2輪播廣告3品牌廣告 */
    private Integer adverFlag;
    
    

    public Long getChannelAdverId() {
        return channelAdverId;
    }

    public void setChannelAdverId(Long channelAdverId) {
        this.channelAdverId = channelAdverId;
    }

    public Long getChannelId() {
        return channelId;
    }

    public void setChannelId(Long channelId) {
        this.channelId = channelId;
    }

    public Long getTempId() {
        return tempId;
    }

    public void setTempId(Long tempId) {
        this.tempId = tempId;
    }

    public Long getFloorId() {
        return floorId;
    }

    public void setFloorId(Long floorId) {
        this.floorId = floorId;
    }

    public String getAdverName() {
        return adverName;
    }

    public void setAdverName(String adverName) {
        this.adverName = adverName;
    }

    public String getAdverPath() {
        return adverPath;
    }

    public void setAdverPath(String adverPath) {
        this.adverPath = adverPath;
    }

    public String getAdverHref() {
        return adverHref;
    }

    public void setAdverHref(String adverHref) {
        this.adverHref = adverHref;
    }

    public Long getAtId() {
        return atId;
    }

    public void setAtId(Long atId) {
        this.atId = atId;
    }

    public Integer getAdverSort() {
        return adverSort;
    }

    public void setAdverSort(Integer adverSort) {
        this.adverSort = adverSort;
    }

    public Long getAdverType() {
        return adverType;
    }

    public void setAdverType(Long adverType) {
        this.adverType = adverType;
    }

    public String getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(String userStatus) {
        this.userStatus = userStatus;
    }

    public String getDes() {
        return des;
    }

    public void setDes(String des) {
        this.des = des;
    }

    public String getDelflag() {
        return delflag;
    }

    public void setDelflag(String delflag) {
        this.delflag = delflag;
    }

    public Long getCreateUserId() {
        return createUserId;
    }

    public void setCreateUserId(Long createUserId) {
        this.createUserId = createUserId;
    }

    /**
     * 時間
     * 
     * @return Date
     */
    public Date getCreateDate() {
        if (this.createDate != null) {
            return new Date(this.createDate.getTime());
        } else {
            return null;
        }
    }

    /**
     * 時間
     */
    public void setCreateDate(Date createDate) {
        if (createDate != null) {
            Date tEmp = (Date) createDate.clone();
            if (tEmp != null) {
                this.createDate = tEmp;
            }
        }
    }

    public Long getUpdateUserId() {
        return updateUserId;
    }

    public void setUpdateUserId(Long updateUserId) {
        this.updateUserId = updateUserId;
    }

    /**
     * 時間
     * 
     * @return Date
     */
    public Date getUpdateDate() {
        if (this.updateDate != null) {
            return new Date(this.updateDate.getTime());
        } else {
            return null;
        }
    }

    /**
     * 時間
     */
    public void setUpdateDate(Date updateDate) {
        if (updateDate != null) {
            Date tEmp = (Date) updateDate.clone();
            if (tEmp != null) {
                this.updateDate = tEmp;
            }
        }
    }

    public String getTemp1() {
        return temp1;
    }

    public void setTemp1(String temp1) {
        this.temp1 = temp1;
    }

    public String getTemp2() {
        return temp2;
    }

    public void setTemp2(String temp2) {
        this.temp2 = temp2;
    }

    public String getTemp3() {
        return temp3;
    }

    public void setTemp3(String temp3) {
        this.temp3 = temp3;
    }

    public String getTemp4() {
        return temp4;
    }

    public void setTemp4(String temp4) {
        this.temp4 = temp4;
    }

    public String getTemp5() {
        return temp5;
    }

    public void setTemp5(String temp5) {
        this.temp5 = temp5;
    }

    public Long getFloorTagId() {
        return floorTagId;
    }

    public void setFloorTagId(Long floorTagId) {
        this.floorTagId = floorTagId;
    }

	public String getAdverTitle() {
		return adverTitle;
	}

	public void setAdverTitle(String adverTitle) {
		this.adverTitle = adverTitle;
	}

	public Integer getAdverFlag() {
		return adverFlag;
	}

	public void setAdverFlag(Integer adverFlag) {
		this.adverFlag = adverFlag;
	}
    
    
}

備註:

1.在日常開發中我們經常需要將json字串轉換為json物件,測試方法中給出了兩種方法解析json資料,看到方法二最為簡單,方便,

2.前臺封裝的json資料的key值名稱必須跟後臺實體物件的屬性名稱一致,否則得到的值為null