更新一下 如果你的数据时用hibernate读出来的,有时候是你想要的那个类的一个动态代理子类,这时会多出很多属性,
这时可以用
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
// 只转换我要的属性
if (name.equals("funcId") || name.equals("funcName") || name.equals("funcCode")) {
return false;
} else {
return true;
}
}
});
JSONArray jsonArray = JSONArray.fromObject(allFuncs, config);
-------------------------------------------------------------------------------------------------
大意是你在Hibernate中出现了递归调用(姑且就叫做递归- -!)导致JSON无法解析你查询出来的数据,详细原因参考网上其他高手的博客,我这里只是详细介绍一下如何在ExtHelper中统一处理这种错误.
关于ExtHelper的使用,可以参考我在DojoChina上发表的一篇文章,地址http://www.dojochina.com/index.php?q=node/1306
在需要获取JSON的地方加入JSON过滤器,用于过滤一些容易产生递归的参数写法如下
List<Department> list = idepartmentBiz.findAll();//获取数据
//自定义JsonConfig用于过滤Hibernate配置文件所产生的递归数据
JsonConfig config = new JsonConfig();
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
//配置你可能出现递归的属性
if (name.equals("posts") || name.equals("hrmIndagates")
|| name.equals("hrmPlans")) {
return true;
} else {
return false;
}
}
});
//调用ExtHelper将你的JSONConfig传递过去
String json=ExtHelper.getJsonFromList(list, config);
在ExtHelper中加入一个方法如下
/**
* 通过自定义confi生成JSON数据
* @param beanList 包含bean对象的集合
* @param config JSONObject的配置文件
* @return
*/
public static String getJsonFromList(List beanList,JsonConfig config){
TotalJson total=new TotalJson();
total.setItems(beanList);
total.setResults(beanList.size());
JSONObject JsonObject=JSONObject.fromObject(total, config);
return JsonObject.toString();
}
这样我们就又可以方便的调用ExtHelper生成我们所需要的JSON数据了.