数据交换之前后端数据格式转换(一)

本文探讨了在前后端数据交换中如何进行json与xml之间的转换,利用fastJson库实现JsonToBean和BeanToXml的过程。通过创建对象对复杂数据结构进行抽象,简化代码并减少错误。转换为对象的好处包括降低代码维护成本,提高可读性和适应性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前后端之间数据交换常用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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值