1. 程式人生 > >資料交換之前後端資料格式轉換(一)

資料交換之前後端資料格式轉換(一)

前後端之間資料交換常用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;