Json数据转化(Circle异常)

来源:互联网 发布:2017大数据发展报告 编辑:程序博客网 时间:2024/06/07 01:00

import net.sf.json.JSONArray;
import net.sf.json.JsonConfig;
import net.sf.json.util.PropertyFilter;


public class Object2Json {
/**
* 将对象(集合)转化为json对象
* @param obj 要转换的对象
* @param ignoreAttr 要忽略的对象
* @return
*/
public static JSONArray toJsonArray(Object obj,final String ignoreAttr){
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {

@Override
public boolean apply(Object arg0, String arg1, Object arg2) {
if (arg1.equals(ignoreAttr)) {
return true;
}else{
return false;
}
}
});
JSONArray jsonArray = JSONArray.fromObject(obj,config);
return jsonArray;
}
}

原因分析在解析bean时,出现死循环调用,即多个bean之间出现了相互调用。导致出现死循环,无法解析json对象。

仔细查了一下发现是hibernate主外键关联的错,发现JSONArray根据判断取得的不同类型调用相应的方法,也就是说主外键自身关联的是个死循环,那怎么才能不让他出现这种情况呢,应该有个配置的参数后者终止循环的地方吧,查看发现,jsonConfig,呵呵,config应该是配置参数吧,参看JsonConfig看见PropertyFilter ,PropertyFilter 是一个interface,代码如下:

也就是说我可以通过这个方法过滤掉List里的相应属性,只要让它返回true就可过滤掉,……,有点悬……我们重写一下这个方法:

 cfg.setJsonPropertyFilter(new PropertyFilter()

    {       

 public boolean apply(Object source, Stringname, Object value) {          if(name.equals("contactGroups")||name.equals("contactGroupPersons"))

{             return true         }

 else {

            return false;         }
        } });

hibernate产生的实体bean中的contactGroupscontactGroupPersons过滤掉就OK了!

然后调用JSONArray.fromObject(mychildren,cfg); mychildrenhibernate返回的list




原创粉丝点击