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

摘要:
*禁用引用检测时,对对象的重复引用不会被$ref替换,但循环引用也会导致StackOverflowError异常。
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》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java: Integer vs int利用curl命令访问Kubernetes API server下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

fastJson与jackson性能对比

转载:https://blog.csdn.net/u013433821/article/details/82905222最近项目用到fastJson和jackson,为了决定到底弃用哪个,随手写了个测试看看到底谁的性能更胜一筹。 看到过很多对比的帖子,大多数结果是fastJson性能高于jackson,可偏偏像SpringMVC这样成熟的框架默认也采用的j...

记一次 SpringBoot2.x 配置 Fastjson 的坑--修正版

原文:https://my.oschina.net/btboys/blog/3055803 实验环境:springboot2.1.6 读者先阅读原文,然后再看本文修正,切记。 作者解释的很到位,关键点也找到了,但没能真正解决问题,如按作者原文做法,系统集成微信公众号,在token验证时一定报错,现给出修正版答案,解决token验证失败情况。 注意:如果系统...

mvn install:installfile将本地一个中央仓库没有的jar包,推到本地仓库所有依赖不上仓库不能用!

前提:maven等环境配置Ok 目标:把中央仓库没有的,部门内部 自研开发的jar,推到私服或者本地服务器,给相关项目组使用! 因为一般工程模块自己mvn install就会推到仓库,但是别人给你个jar包咋整?有源码 一般mvn install就会上本地仓库,没有源码只有jar包 1.在需要推的jar的位置,执行以下命令(注意空格和中杠) :mvn in...

FastJson简单实现@JsonInclude效果,使得非空字段不返回

引言:记录最近一次做项目过程中碰到的一个FastJson序列化的问题,本次项目基于spring boot实现,在接口返回数据的时候,实体类的序列化是由FastJson完成的,但是由于功能需要,我需要将某个实体类中的些为空的字段则不返回,但是不能改动FastJson作为序列化的大逻辑,也就是说不能将序列化由FastJson替换为JackSon,但是要实现Ja...

Java几种常用JSON库性能比较

本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲手测试过的才是最值得相信的。 JSON不管是在Web开发还是服务器开发中是相当常见的数据传输格式,一般情况我们对于JSON解析构造的性能并不需要过于关心,除非是在性能要求比较高的系统。 目前对于J...

转:Jmeter对Json格式数据的三种处理方式

1 { 2 : "code":"000000", 3 : "data": 4 : { 5 : : "pageCount":"1", 6 : : "prizeLists": 7 : : [ 8 : : : { 9 : : : : "cellphoneNum":"134****0...