Fastjson集合中相同对象序列化问题

问题

在使用Fastjson序列化集合时,为将集合中相同对象的值序列化,重复对象会转换为引用

重现过程

引入依赖

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>2.0.42</version>
    </dependency>

代码

package org.example;

import com.alibaba.fastjson.JSON;

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

public class Demo001 {

    public static void main(String[] args) {
        User u1 = new User("001","A");
        User u2 = new User("002","B");

        List<User> list = new ArrayList<>();
        list.add(u1);
        list.add(u1);
        list.add(u2);
        System.out.println(list);

        String jsonStr = JSON.toJSONString(list);

        System.out.println(jsonStr);
    }

    public static class User{
        private String id;

        private String name;

        public String getId() {
            return id;
        }

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

        public String getName() {
            return name;
        }

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

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

        @Override
        public String toString() {
            return "User{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
}

结果

[User{id='001', name='A'}, User{id='001', name='A'}, User{id='002', name='B'}]
[{"id":"001","name":"A"},{"$ref":"$[0]"},{"id":"002","name":"B"}]

解决方式

  • 去除重复
  • 或升级为fastjson2
    引入依赖
    <dependency>
      <groupId>com.alibaba.fastjson2</groupId>
      <artifactId>fastjson2</artifactId>
      <version>2.0.42</version>
    </dependency>

思考

  • 在使用Fastjson序列化重要对象时需注意,同一个集合中不要有重复的对象,可能会导致程序异常。
posted @   落子不悔  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示