起因: redis的数据集 只支持字符类型的数据,所以object转为字符串时 出现引用的问题
说明方法来源:String com.alibaba.fastjson.JSON.toJSONString(Object object)
Map<String, Object> user_info = new HashMap<String, Object>();
user_info.put("user_info", "1");
List<Map<String, Object>> list1 = new ArrayList<Map<String,Object>>();
for (int i = 0; i <2; i++) {
Map<String, Object> ma1p = new HashMap<String, Object>();
List<Map<String, Object>> list = Arrays.asList(user_info);
ma1p.put("et", list);
list1.add(ma1p);
}
System.out.println(JSONObject.toJSONString(list1));
输出内容为: [{"et":[{"user_info":"1"}]},{"et":[{"$ref":"$[0].et[0]"}]}]
第一种(这种比较蠢的办法):
Map<String, Object> user_info = new HashMap<String, Object>();
user_info.put("user_info", "1");
Map<String, Object> user_info2 = new HashMap<String, Object>();
user_info2.put("user_info", "1");
List<Map<String, Object>> list1 = new ArrayList<Map<String,Object>>();
Map<String, Object> ma1p = new HashMap<String, Object>();
List<Map<String, Object>> list = Arrays.asList(user_info);
ma1p.put("et", list);
list1.add(ma1p);
ma1p = new HashMap<String, Object>();
list = Arrays.asList(user_info2);
ma1p.put("et", list);
list1.add(ma1p);
System.out.println(JSONObject.toJSONString(list1));
输出内容为 [{"et":[{"user_info":"1"}]},{"et":[{"user_info":"1"}]}]
第二种(好一点):
Map<String, Object> user_info = new HashMap<String, Object>();
user_info.put("user_info", "1");
List<Map<String, Object>> list1 = new ArrayList<Map<String,Object>>();
for (int i = 0; i <2; i++) {
Map<String, Object> ma1p = new HashMap<String, Object>();
Map<String, Object> user_info1 = new HashMap<String, Object>();
user_info1.putAll(user_info);
List<Map<String, Object>> list = Arrays.asList(user_info1);
ma1p.put("et", list);
list1.add(ma1p);
}
输出:[{"et":[{"user_info":"1"}]},{"et":[{"user_info":"1"}]}]
这里解决办法是new出新的对象,转字符串时就不会是引用了。
有更好的建议欢迎评论区留言。