码迷,mamicode.com
首页 > Web开发 > 详细

fastjson生成JSON字符串的时候出现$ref

时间:2017-10-18 20:06:22      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:也会   system   get   问题   san   arraylist   serialize   转化   int   

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生成JSON字符串的时候出现$ref

标签:也会   system   get   问题   san   arraylist   serialize   转化   int   

原文地址:http://www.cnblogs.com/shibazizhan/p/7688206.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!