当前位置: 首页 > 图文教程 > 网络编程 > Javascript > json-lib出现There is a cycle in the hierarchy解决办法

Javascript
让您的菜单不离网站
JavaScript去除空格的几种方法
TFDN图片播放器 不错自动播放
通过ifame指向的页面高度调整iframe的高度
解放web程序员的输入验证
让背景如此暗淡(一种弹出提示信息时页面背景色调改变的方法)
关于textarea的直观换行的一些研究材料
网页缓存文件批量改名工具
按钮里的字可以换行吗
许愿墙中用到的函数
自动更新作用
激活 ActiveX 控件
使用Javascript和DOM Interfaces来处理HTML
获取DOM对象的几种扩展及简写
splice slice区别
Array.slice()与Array.splice()的返回值类型
$$()函数应用实例
window.open的功能全解析
点击单元格后可编辑单元格内文本如何制作
用JavaScript脚本实现Web页面信息交互

Javascript 中的 json-lib出现There is a cycle in the hierarchy解决办法


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-02-27   浏览: 211 ::
收藏到网摘: n/a

如果需要解析的数据间存在级联关系,而互相嵌套引用,在hibernate中极容易嵌套而抛出net.sf.json.JSONException: There is a cycle in the hierarchy异常。 解决办法
1.设置JSON-LIB让其过滤掉引起循环的字段。
Java代码
复制代码 代码如下:

JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register
config.setExcludes(new String[]{//只要设置这个数组,指定过滤哪些字段。
"consignee",
"contract",
"coalInfo",
"coalType",
"startStation",
"balanceMan",
"endStation"
});
String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}";
out.print(tempStr);
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register
config.setExcludes(new String[]{//只要设置这个数组,指定过滤哪些字段。 "consignee", "contract", "coalInfo", "coalType", "startStation", "balanceMan", "endStation" }); String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}"; out.print(tempStr);
2.设置JSON-LIB的setCycleDetectionStrategy属性让其自己处理循环,省事但是数据过于复杂的话会引起数据溢出或者效率低下。
Java代码
[code]
JsonConfig config = new JsonConfig();
config.setIgnoreDefaultExcludes(false);
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
config.registerJsonValueProcessor(Date.class,new DateJsonValueProcessor("yyyy-MM-dd")); //date processor register
String tempStr = "{\"TotalRecords\":"+ total.toString() +",\"Datas\":"+JSONSerializer.toJSON(list,config).toString()+"}";
out.print(tempStr);