Fastjson-fastjson中$ref对象重复引用问题
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
/**
* fastjson中$ref对象重复引用问题
*
* 介绍:
* FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。
* 关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverflowError异常。
*
* 用法:
* JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
*/
public class TestFastJson {
List<Person> list = new ArrayList<Person>();
Person p = new Person("ZhangSan", 23);
/**
* 测试main
*/
public static void main(String[] args) {
// new TestFastJson().test1();
new TestFastJson().test2();
}
/**
* 未关闭引用检测,转化字符串时会出现$ref
*/
public void test1() {
list.add(p);
list.add(p);
String jsonStr = JSON.toJSONString(list);
System.out.println(jsonStr);
// [{"age":23,"name":"ZhangSan"},{"$ref":"$[0]"}]
}
/**
* 关闭引用检测后,$ref的问题就会被解决
*/
public void test2() {
list.add(p);
list.add(p);
String jsonStr = JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect);
System.out.println(jsonStr);
// [{"age":23,"name":"ZhangSan"},{"age":23,"name":"ZhangSan"}]
}
}
class Person {
private String name;
private int age;
// 构造函数
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
// getters/setters(略)
}
阅读更多- Fastjson-fastjson中$ref对象重复引用问题
- fastjson中$ref对象重复引用问题解决方法
- Fastjson.tojsonString中$ref对象重复引用问题
- 关于FastJson的一些问题的处理(时间问题 ,转换json重用对象引用问)
- 解决FastJson的$ref循环引用检测的问题
- 解决fastjson内存对象重复/循环引用json错误
- 解决fastjson内存对象重复/循环引用json错误
- 【Java】消除fastjson对同一对象循环引用的问题
- 当使用json写map对象时里面的重复对象会变成引用,导致前段取不到
- [github系列问题]打印fastjson对象时,如果内部键值为null,则该键不会打印出来
- 【FastJSON】解决FastJson中“$ref 循环引用”的问题
- 解决FastJson中“$ref 循环引用”的问题
- fastJson解析复杂对象时碰到的问题
- fastjson空对象不显示问题
- 【FastJSON】解决FastJson中“$ref 循环引用”的问题<三种方式对应不同需求>
- fastjson转换对象,属性首字母大小写的问题
- fastjson.jar 对象序列化数据丢失问题
- FastJson循环引用问题
- 在springmvc中解决FastJson循环引用的问题
- 前端js解决fastjson $ref引用问题