循环引用

使用Fastjson解析List对象时出现:{"$ref":"$.data[0].task.OBJECTS[0]"}的问题原因及解决方法

走远了吗. 提交于 2019-12-26 01:14:31
首先,说一下出现问题的原因:后台传过去的json数据用了阿里巴巴的fastjson转换,但是有个问题就是:解析list中引用的数据时,jvm避免数据溢出,会自动处理为“循环引用”,因此,也就出现了问题的根源{"$ref":"$.data[0].task.OBJECTS[0]"},数据以引用的方式传给前台,前台却无法解析到那段引用的数据。 循环引用:当一个对象包含另一个对象时,fastjson就会把该对象解析成引用。 然后,知道了问题的根源,就知道往什么方向解决问题了--禁止循环引用。 解决方案如下所示 : 注:map中存放了你需要传到前台的数据对象:data!并且data中的对象数据存在循环引用。 网上的解决方案: JSON.toJSONString(list,SerializerFeature.DisableCircularReferenceDetect) 注:不管你是引用JSON,还是JSONObject,主要是看你想传的对象是啥类型,然后转换成JSON / JSONObject 下面介绍一些引用的描述: "$ref":".." 上一级 "$ref":"@" 当前对象,也就是自引用 "$ref":"$" 根对象 "$ref":"$.children.0" 基于路径的引用,相当于 root.getChildren().get(0)

ios block常见的错误(二)——循环引用

≯℡__Kan透↙ 提交于 2019-12-10 05:59:05
这篇博文继续block的常见错误——循环引用。 循环引用是很多初学者不能察觉的,其产生的原因, 是block中的代码会对对象进行强引用 。 读者请阅读示例代码1,并思考示例代码1所创建的对象能否被正常销毁? 示例代码1: * mark 将代码改为调用self的方法 -(NSMutableArray * (_myBlocks ===-=(^sum)(, ) = ^( x, mark 对象被释放时自动调用 - ( 结果是不能正常释放的。读者不妨在xcode中试试。 产生原因在block代码中出现了self: int(^sum)(int, int) = ^(int x, int y) { return [self sum:x y:y]; }; 此时sum的block对self强引用,在加上self对myBlocks强引用: @property (nonatomic, strong) NSMutableArray *myBlocks; 以及sum block被添加到数组时,会被数组强引用: [self.myBlocks addObject:sum]; 这三个引用之间形成了循环引用,如下图: 循环引用的结果就是对象无法被释放! 碰到这类问题,程序员如何解除循环引用呢? 有以下几种解决方案: 1.在block代码中不要引用self以及其他局部变量;如 int(^sum)(int, int) =

从循环引用到hibernate的游离化

倖福魔咒の 提交于 2019-12-02 14:24:06
问题描述: 列表页面,50多条数据只显示3条,其他的也显示出来了,不过全部都是空白,差点哭晕在厕所 然后debug断点进去看,发现好多的json数据长这个样子的 "dept":{"$ref":"$[0].dept" (这里给的是类似这样的字符串) "$ref":"$"} 引用根对象 {"$ref":"@"} 引用自己 {"$ref":".."} 引用父对象 {"$ref":"../.."} 引用父对象的父对象 {"$ref":"$.members[0].reportTo"} 基于路径的引用 查着就发现了循环引用的新名词 附上一个详细链接 循环引用 即使用的是fastjson,在list转json的时候出现了循环引用。 我尝试关闭的时候报了这样的错 WARN: Nested in org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.StackOverflowError: java.lang.StackOverflowError at java.util.LinkedHashMap$KeyIterator.<init>(LinkedHashMap.java:404) at java.util.LinkedHashMap