您的位置:首页 > Web前端 > JavaScript

Fastjson.tojsonString中$ref对象重复引用问题

2017-09-07 11:06 609 查看
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(略)

}


转:http://www.cnblogs.com/zj0208/p/6196632.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: