fastjson中$ref物件重複引用問題解決方法
阿新 • • 發佈:2019-01-31
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