java解析json資料(前臺json資料封裝後臺springmvc解析)
阿新 • • 發佈:2019-02-15
業務:前臺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