使用fastjson的JSONObject的静态方法prseObject()和toJSONString()将Map对象中的值解析为JSONObject的莫名符号$ref

本文详细介绍了在Java中使用HashMap和List时,由于对象引用导致的同一对象被多个集合引用的问题,并提供了解决方案,即通过复制对象属性值来创建独立实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map<String, List<ClassDO>> classTable = new HashMap<>();
JSONObject open = JSONObject.parseObject(JSONObject.toJSONString(classTable));

上面的JSONObject变量open中ClassDO类的对象出现了类似这样的值 : "$ref":"$.w7.d2[0]"

经验证,是在不同的List<ClassDO>对象中的add进了同一个ClassDO对象:也就是下面这中情况。

ClassDO classDO = new ClassDO();
Map<String, List<ClassDO>> classTable = new HashMap<>();
List<ClassDO> oneList = new LinkedList<ClassDO>();
List<ClassDO> twoList = new LinkedList<ClassDO>();
oneList.add(classDO);
twoList.add(classDO);
classTable.put("one",oneList);
classTable.put("two",twoList);

我就直接使用了spring框架的BeanUtils.copyProperties()方法复制出不同的ClassDO对象加入不同的List<ClassDO>中解决了问题,

如下:

ClassDO oneClassDO = new ClassDO();
ClassDO twoClassDO = new ClassDO();
BeanUtils.copyProperties(oneClassDO,twoClassDO) //将oneClassDO中的属性值copy给twoClassDO
Map<String, List<ClassDO>> classTable = new HashMap<>();
List<ClassDO> oneList = new LinkedList<ClassDO>();
List<ClassDO> twoList = new LinkedList<ClassDO>();
oneList.add(oneClassDO);
twoList.add(twoClassDO);
classTable.put("one",oneList);
classTable.put("two",twoList);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值