首页 > 其他分享 >FastJson循环引用特性

FastJson循环引用特性

时间:2022-11-16 16:12:27浏览次数:56  
标签:FastJson name 特性 public JSON 引用 序列化 id String

  1. FastJson在序列化集合时,若集合循环引用特性
package com.yang;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.ArrayList;
import java.util.List;

/**
 * @description: FastJson循环引用特性
 * @author: Yang JianXiong
 * @since: 2022/11/16
 */
public class Go {

    public int id;

    public String name;

    public Go(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        Go a = new Go(1, "a");
        Go b = new Go(2, "b");

        List<Go> list0 = new ArrayList<>();
        list0.add(a);
        list0.add(b);
        System.out.println("1.不重复,序列化结果:" + JSON.toJSONString(list0));

        List<Go> list = new ArrayList<>();
        list.add(a);
        list.add(a);
        String json = JSON.toJSONString(list);
        System.err.println("2.重复,序列化结果:" + json);
        System.err.println("3.重复,但【禁止循环引用检查】,序列化结果:" + JSON.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect));

        List<Go> listFromDeserialize = JSON.parseObject(json, new TypeReference<List<Go>>() {
        });
        System.err.println("4.重复,序列化后,再反序列化结果:" + JSON.toJSONString(listFromDeserialize));

    }

}

输出结果:

1.不重复,序列化结果:[{"id":1,"name":"a"},{"id":2,"name":"b"}]
2.重复,序列化结果:[{"id":1,"name":"a"},{"$ref":"$[0]"}]
3.重复,但【禁止循环引用检查】,序列化结果:[{"id":1,"name":"a"},{"id":1,"name":"a"}]
4.重复,序列化后,再反序列化结果:[{"id":1,"name":"a"},{"$ref":"$[0]"}]

标签:FastJson,name,特性,public,JSON,引用,序列化,id,String
From: https://www.cnblogs.com/JaxYoun/p/16896272.html

相关文章

  • Java引用类型参数传递
    结论:1)当使用基本数据类型作为方法的形参时,在方法体中对形参的修改不会影响到实参的数值2)当使用引用数据类型作为方法的形参时,若在方法体中修改形参指向的数据内容,则会对实......
  • 【引用】『转』【大端(Big Endian)与小端(Little Endian)简介】
    【大端(BigEndian)与小端(LittleEndian)简介】ByteEndian是指字节在内存中的组织,所以也称它为ByteOrdering,或ByteOrder。    对于数据中跨越多个字节的对象,我们......
  • C++11新特性系列
    C++11/14特性系列1.variadictemplates(可变参数模板)//需要处理最后一个无参的情况voidprint(){}template<typename...Types>voidprint(constTypes&.........
  • ES6-import后加花括号{}和不加花括号引用模块的区别
    ES6-import后加花括号{}和不加花括号引用模块的区别使用花括号在A文件中想要引用B文件模块,所引入的名字必须与B文件中导出的名字相同在A.js中exportconstA{***}那么......
  • 批针与引用的区别
    1)非空区别在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象2)合法性区别在使用引用之前不需要测试它的合法性,相反,指针则应总被测试,防止其为空......
  • C++——各版本新特性
    参考:https://www.cnblogs.com/yrm1160029237/p/14246166.htmlC++11auto关键字decltype关键字nullptr字面值constexpr关键字for(declaration:expression)Lambda表......
  • C++面经 : C++ 11 新特性(闭包与匿名函数) ----C++ Closure & C++ anonymous functions
    关于C++Closure闭包和C++anonymousfunctions匿名函数什么是闭包?在C++中,闭包是一个能够捕获作用域变量的未命名函数对象,它包含了需要使用的“上下文”(函数......
  • 小程序基础之引用vant组件库
    第一步:终端npminit-y会生成一个pack.json文件。(初始化包管理,记录这个项目用的包。)第二步:npminstall会生成一个package-lock.json文件。(一个版本锁定的功能)上两步有......
  • 随参信道的传输特性
    1.随参信道的特性    2.多径传播的影响         ......
  • 恒参信道的传输特性
    1.理想恒参信道的特性      2.实际恒参信道的特性       ......