前后端之间数据交换常用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;