论坛首页 Web前端技术论坛

json lib 只转换我要的属性 There is a cycle in the hierarchy!

浏览 2387 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-19   最后修改:2009-10-16

更新一下  如果你的数据时用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数据了.

论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics