问题: 使用fastjson 的 对同一个JSONObject对象 多次引用后, 通过 JSON.toJSONString() 方法进行json序列化时出现只有第一次的可以成功序列化未json string 字符串, 后面的对象都为引用地址;
示例:
public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.put("name", "fastJson");jsonObject.put("age", 18);List<JSONObject> list = new ArrayList<>();for (int i = 0; i < 5; i++) {list.add(jsonObject);}log.info("数据 : {}", JSON.toJSONString(list));}
输出:
数据 :
[{"name": "fastJson","age": 18},{"$ref": "$[0]"},{"$ref": "$[0]"},{"$ref": "$[0]"},{"$ref": "$[0]"}
]
解决方案:
public static void main(String[] args) {JSONObject jsonObject = new JSONObject();jsonObject.put("name", "fastJson");jsonObject.put("age", 18);List<JSONObject> list = new ArrayList<>();for (int i = 0; i < 5; i++) {// list.add(jsonObject);// 添加克隆对象list.add(jsonObject.clone());}log.info("数据 : {}", JSON.toJSONString(list));}
输出:
[{"name": "fastJson","age": 18},{"name": "fastJson","age": 18},{"name": "fastJson","age": 18},{"name": "fastJson","age": 18},{"name": "fastJson","age": 18}
]