问题: 使用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
}
]