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

Javascript
mvc模式分离javascript开发
30个美观的有创意的和引人注目的灵感导航菜单
JS教程:匿名函数
JS教程:childNodes与parentNode
IE浏览器的DOM模型
使用yui3实现最简单拖动
YUI的简单的dom事件
JS区别IE6、IE7、IE8之间的方法
JavaScript教程:Table行定位效果
建立HTML字符串的最快速方法
10个美观实用的jQuery和MooTool日历插件
JS教程:Javascript实现缓动效果
Javascript小游戏贪吃蛇(详细注释)
JavaScript组件开发:分析和设计组件
JavaScript:判断iframe是否加载完成的完美方法
JS特效详解:图片幻灯片切换
JS给文本区域(textarea)字数限制
用js按比例重定图片尺寸
不用组件实现Ajax效果
PHP+JS实现搜索自动提示

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-02-27   浏览: 544 ::
收藏到网摘: 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);