1. 程式人生 > >fastjson中$ref物件重複引用問題解決方法

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(略) }

轉載:http://www.cnblogs.com/zj0208/p/6196632.html