由depth参数引起JsonKit输出null,前端识别出错

糊搞 发布于 2015/03/06 12:32
阅读 792
收藏 0

@JFinal 你好,想跟你请教个问题:

在使用EasyUI的Tree时,由后台JsonRender返回了Tree需要的Json字串。字串有部分导致解析失败,如下图:

children中是一个List,存放了Model,但输出的字串却是"null"

查找原因,发现是因为JsonKit中的depth参数引起,代码位置如下图:

由于(depth--)<0的条件达到,此处返回了字串"null",引起UI解析出错。查看了JsonKit.listToJson()方法,原则上是没有问题的,但由depth引起的问题应该使用空字串""会比"null"好些吧,希望 @JFinal 多考虑一下解决方案。

目前我的解决方法是在Config中强行拉高depth,希望能有更好的方案解决此问题:

@Override
public void afterJFinalStart() {
	JsonRender.setConvertDepth(16);
}



题外话:

默认的depth=8在由Model组成的Tree结构中实际只能支持4级,因为Model是Map,所以占用了一层。Model中使用model.put("children", list),又占用了一层。1个Tree层级占用了2个depth层级,所以我很快(说是快,实际花了3小时)发现了上述情况,希望给大家一个提醒。


加载中
1
JFinal
JFinal

    转换时如果出现需要转换的数据转成了 "null" 是因为转换深度未能达到期望值,可以在转换时传个参数进去,如: JsonKit.toJson(obj, 123)。当 (depth--) <0 时返回空串与返回 "null" 都是不对的,因为还有需要转换的数据要转,需要保障转换正确才严谨。

    另外,默认 depth=8 在由 Model 组成的 tree 结构经过测试是一定可以的,建议检查一下代码,或提供测试代码给我。

    最后, depth 参数是为了避免在对象有循环依赖时产生死循环,所以这个变量叫做 safeCounter 或许更加合适,jfinal 2.0 版已将这个 depth 改为了 39,进一步减少人为干预。感谢支持 jfinal 发展 

糊搞
期待JFinal 2.0
0
糊搞

引用来自“JFinal”的评论

    转换时如果出现需要转换的数据转成了 "null" 是因为转换深度未能达到期望值,可以在转换时传个参数进去,如: JsonKit.toJson(obj, 123)。当 (depth--) <0 时返回空串与返回 "null" 都是不对的,因为还有需要转换的数据要转,需要保障转换正确才严谨。

    另外,默认 depth=8 在由 Model 组成的 tree 结构经过测试是一定可以的,建议检查一下代码,或提供测试代码给我。

    最后, depth 参数是为了避免在对象有循环依赖时产生死循环,所以这个变量叫做 safeCounter 或许更加合适,jfinal 2.0 版已将这个 depth 改为了 39,进一步减少人为干预。感谢支持 jfinal 发展 

Model 组成的 tree 是正常的,我发现此问题是因为 depth 的深度不够才导致UI解析出错。

我同意你说的:当 (depth--) <0 时返回空串与返回 "null" 都是不对的

depth 改为了 39只是冶标而已,完整的解决方案是什么?

返回顶部
顶部