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 @ 2023-11-19 17:12  落子不悔  阅读(134)  评论(0)    收藏  举报