问题描述:
普通的arraylist在转换json格式的时候,出现错误,多了字段
对象:
public class testBean {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String gettrimname() {
return name.trim();
}
public String test2(){
return name+">>>>>>>测试方法";
}
}
测试:
public class testMain {
public static void main(String[] args) {
List<testBean> lis=new ArrayList<testBean>();
testBean t1=new testBean();
t1.setId(1);
t1.setName("zhangsan ");
testBean t2=new testBean();
t2.setId(2);
t2.setName("lisi ");
lis.add(t1);
lis.add(t2);
System.out.println(JSONArray.fromObject(lis));
Gson gson=new Gson();
System.out.println(gson.toJson(lis));
}
}
结果:

发现使用JSONArray转换json,多出了trimname字段,trimname字段来自于对象中多写的gettrimname方法
但是gson没有出现并且没有调用gettrimname方法。

查看源码,发现jsonarry把解析了对象中所有的get,set方法,做为writeMethod,readMethod方法
然后存储在jsonObject中,就是一个map结构,当然在操作每一个属性的时候,也用到强转等操作


也就明白了,当对象中添加除了getset方法之外的方法还是要慎重的,别用get,set开头
那gson是如何操作的呢?

也就明白了为什么最初的转json会出现问题
博客指出普通ArrayList转换JSON格式时出现多字段问题,经测试发现使用JSONArray转换会多出trimname字段,该字段源于对象中多写的gettrimname方法,而gson无此问题。查看源码得知JSONArray会解析对象所有get、set方法,提醒添加方法时慎用get、set开头。

1万+

被折叠的 条评论
为什么被折叠?



