com.alibaba.fastjson.JSONObject循环给同一对象赋值会出现"
发布时间:2020-12-16 18:43:28 所属栏目:百科 来源:网络整理
导读:1.今天定义了一个JSONObject对象,引用的com.alibaba.fastjson.JSONObject,循环给这个对象赋值出现"$ref":"$[0]"现象, /** * fastjson中$ref对象重复引用问题 * * 介绍: * FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项
1.今天定义了一个JSONObject对象,引用的com.alibaba.fastjson.JSONObject,循环给这个对象赋值出现"$ref":"$[0]"现象, /** * fastjson中$ref对象重复引用问题 * * 介绍: * FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。 * 关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverflowError异常。 * * 用法: * JSON.toJSONString(object,SerializerFeature.DisableCircularReferenceDetect); */
1 2 3 import com.alibaba.fastjson.JSONArray; 4 import com.alibaba.fastjson.JSONObject; 5 6 public class test { 7 8 public static void main(String[] args) { 9 JSONObject json = new JSONObject(); 10 JSONArray array = new JSONArray(); 11 for(int i=0;i<3;i++){ 12 json.put("id",i); 13 array.add(json); 14 System.out.println(array); 15 } 16 System.out.println(array); 17 } 18 } 上面的例子就会出现这个现象。(但是如果把JSONObject json = new JSONObject();放到for循环之内就不会出现,因为每次循环都会新建一个对象,彼此不一样) 1 2 3 import com.alibaba.fastjson.JSON; 4 import com.alibaba.fastjson.JSONArray; 5 import com.alibaba.fastjson.JSONObject; 6 import com.alibaba.fastjson.serializer.SerializerFeature; 7 8 public class test { 9 10 public static void main(String[] args) { 11 JSONObject json = new JSONObject(); 12 JSONArray array = new JSONArray(); 13 for(int i=0;i<3;i++){ 14 json.put("id",i); 15 String str = JSON.toJSONString(json,SerializerFeature.DisableCircularReferenceDetect); 16 JSONObject jsonjson = JSON.parSEObject(str); 17 array.add(jsonjson); 18 System.out.println(array); 19 } 20 System.out.println(array); 21 } 22 } ? 这个SerializerFeature.DisableCircularReferenceDetect就是关闭引用检测,就不会出现$ref了, 2.当然也可以吧JSONObject初始化放到for循环内,这样就不用关闭检测了。 操作网址:https://www.cnblogs.com/zj0208/p/6196632.html 自己的思路做个记录,如果侵权,请联系删除 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |