資料交換之前後端資料格式轉換(一)
阿新 • • 發佈:2019-02-08
前後端之間資料交換常用json格式,呼叫webService進行資料交換xml佔了許多。所以今天要記錄的是我們通過傳入的json或者xml 轉換為物件,進行一系列資料計算,再拼接成json或者xml。
這裡我們使用fastJson進行解析.
第一篇:JsonToBean,BeanToXml
//這是我們測試使用的json串
String json="" +
"{\"Category\":[{" +
"\"categoryId\":1,\"categoryName\":\"飲品\",\"categoryImage\":\"/upload/yinpin.jpg\" " +
"},{" +
"\"categoryId\":2,\"categoryName\":\"食品\",\"categoryImage\":\"/upload/shiping.jpg\"" +
"}]" +
"}";
首先對於格式我們先分析,Category下有兩個一樣的陣列,我們則可以將這個陣列i 裡面包含的{“categoryId”:1,”categoryName”:”飲品”,”categoryImage”:”/upload/yinpin.jpg”}這些抽象成物件
請看程式碼
public class JsonModelReq {
private String categoryId;
private String categoryImage;
private String categoryName;
public String getCategoryName() {
return categoryName;
}
public void setCategoryName(String categoryName) {
this.categoryName = categoryName;
}
public String getCategoryId() {
return categoryId;
}
public String getCategoryImage() {
return categoryImage;
}
public void setCategoryId(String categoryId) {
this.categoryId = categoryId;
}
public void setCategoryImage(String categoryImage) {
this.categoryImage = categoryImage;
}
}
因為是陣列,所以我們需要再建一個類,來代表list
public class JsonModelList {
private List<JsonModelReq> jsonModels = new ArrayList<JsonModelReq>();
public List<JsonModelReq> getJsonModels() {
return jsonModels;
}
public void setJsonModels(List<JsonModelReq> jsonModels) {
this.jsonModels = jsonModels;
}
}
public class JsonModelAll {
private JsonModelList jsonModelList;
public JsonModelList getJsonModelList() {
return jsonModelList;
}
public void setJsonModelList(JsonModelList jsonModelList) {
this.jsonModelList = jsonModelList;
}
@Test
public void JsonToBean(){
String json="" +
"{\"Category\":[{" +
"\"categoryId\":1,\"categoryName\":\"飲品\",\"categoryImage\":\"/upload/yinpin.jpg\"" +
"},{" +
"\"categoryId\":2,\"categoryName\":\"食品\",\"categoryImage\":\"/upload/shiping.jpg\"" +
"}]" +
"}";
System.out.println(json);
JsonModelAll all=new JsonModelAll();
JsonModelList Modellist=new JsonModelList();
JSONObject o=(JSONObject)JSON.parse(json);
List<JsonModelReq> arrs=JSON.parseArray(o.getString("Category"),JsonModelReq.class);
if(arrs!=null){
for(JsonModelReq arr:arrs){
System.out.println(arr.getCategoryId()+","+arr.getCategoryImage()+","+arr.getCategoryName());
}
}
Modellist.setJsonModels(arrs);
all.setJsonModelList(Modellist);
all.BeanToXml(all);
}
public void BeanToXml(JsonModelAll all){
StringBuffer sb=new StringBuffer();
sb.append("<Category>");
if(all!=null){
List<JsonModelReq> lists= all.getJsonModelList().getJsonModels();
for(JsonModelReq list:lists){
sb.append("<categoryId>");
sb.append(list.getCategoryId());
sb.append("<categoryId>");
sb.append("<categoryName>");
sb.append(list.getCategoryName());
sb.append("</categoryName>");
sb.append("<categoryImage>");
sb.append(list.getCategoryImage());
sb.append("</categoryImage>");
}
}
sb.append("</Category>");
System.out.println("sb="+sb);
}
}
結果:
{"Category":[{"categoryId":1,"categoryName":"飲品","categoryImage":"/upload/yinpin.jpg"},{"categoryId":2,"categoryName":"食品","categoryImage":"/upload/shiping.jpg"}]}
1,/upload/yinpin.jpg,飲品
2,/upload/shiping.jpg,食品
sb=
<Category><categoryId>1<categoryId><categoryName>飲品</categoryName><categoryImage>/upload/yinpin.jpg</categoryImage><categoryId>2<categoryId><categoryName>食品</categoryName><categoryImage>/upload/shiping.jpg</categoryImage></Category>
這裡只是簡單演示一下。
應該會有人問,我直接不用轉換成物件也可以做出來啊,為什麼要轉呢?
JSONObject o=(JSONObject)JSON.parse(json);
JSONArray arrays=JSON.parseArray(o.get("Category").toString());
JSONObject jo=(JSONObject)arrays.get(0);
System.out.println(jo.get("categoryId"));
我個人認為的理解:
1:程式碼量會增大,而且在專案進行中,會存在很多的不可變因素,比如說修改json中的欄位,這樣會導致又要重新看邏輯來寫
2:如果中間有大量的欄位,比如說20個,這樣一來,可能會導致人為的操作錯誤
3:變成物件,我們不需要對其他地方修改,如果欄位變了,比如大小寫,比如增加欄位,只需要在對應的類中增加一個變數,get set就行。
4:java是一門面向物件的語言,我們應該使用面向物件的思維來看待。
fastjson對於欄位還提供了一種方式,對於欄位中大小寫的改變提供了一種很方便的方法
//比如說傳入的CategoryId由原來的小寫改為了大寫
@JSONField(name="CategoryId")
private String categoryId;