JSON

JSON处理Hibernate实体类net.sf.json.JSONException: There is a

字号+ 作者:H5之家 来源:H5之家 2018-02-10 12:00 我要评论( )

由于Hibernate中好多实体类都级联关系,也就是某个类,出现了别的类的引用对象充当属性。那么这样的话用JSON来进行处理会出现嵌套的异常:net.sf.json.JSONExcep

由于Hibernate中好多实体类都级联关系,也就是某个类,出现了别的类的引用对象充当属性。那么这样的话用JSON来进行处理会出现嵌套的异常:net.sf.json.JSONException: There is a cycle in the hierarchy异常。

在处理这个错误之前先看看普通的JSON处理数据示例

TProcessInfoDAO dao = new TProcessInfoDAO(); List<TProcessInfo> orgData = dao.findAll(); JSONArray array=JSONArray.fromObject(orgData); String json=array.toString(); System.out.println(json);

这样的处理方式中要求TProcessInfoDAO类所有属性必须是普通属性,不包含引用按对象

如果包含引用对象一般需要做一下配置过滤引用属性,这样JSON处理就能通过:这种是不会输出引用对象的

TProcessInfoDAO dao = new TProcessInfoDAO(); List<TProcessInfo> orgData = dao.findAll(); JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new PropertyFilter() { public boolean apply(Object source, String name, Object value) { //配置你可能出现递归的属性 if (name.equals("TProcessInfos") || name.equals("TProcessInfo")) { return true; } else { return false; } } }); //调用ExtHelper将你的JSONConfig传递过去 JSONArray JsonArr=JSONArray.fromObject(orgData, config); String jsonstr=JsonArr.toString();

还有一种处理方式,这种会输出引用对象

设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环,省事但是数据过于复杂的话会引起数据溢出或者效率低下。

TProcessInfoDAO dao = new TProcessInfoDAO(); List<TProcessInfo> orgData = dao.findAll(); JsonConfig config = new JsonConfig(); config.setIgnoreDefaultExcludes(false); config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); //调用ExtHelper将你的JSONConfig传递过去 JSONArray JsonArr=JSONArray.fromObject(orgData, config); String jsonstr=JsonArr.toString(); System.out.println(jsonstr);

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 给控制台程序传递json参数时出错

    给控制台程序传递json参数时出错

    2018-02-10 11:01

  • vizjson:json 中的图形语法

    vizjson:json 中的图形语法

    2018-02-10 08:00

  • 转换JSONArray到字符串

    转换JSONArray到字符串

    2018-02-09 18:02

  • 邻家的技术仓库

    邻家的技术仓库

    2018-02-09 17:10

网友点评