Fastjson-fastjson中$ref对象重复引用问题

当你有城市数据,你需要按国内、国际、热门城市分成数组的形式给出并输出为json格式。

第一个问题,你的数据格式,需要按字母类别划分,比如:

"int": {
            "C": [
                {
                    "acityId": "1001",
                    "acityIndex": "C",                  
                    "cityCname": "成都",
                    "cityEname": "Chengdu",
                    "isAbroad": 0,
                    "isHot": 1
                }
            ],
            "L": [
                {
                    "acityId": "1002",
                    "acityIndex": "L",
                    "airportCname": "拉萨",                 
                    "cityCname": "拉萨",
                    "cityEname": "Lasa",
                    "isAbroad": 0,
                    "isHot": 1
                }
            ]
        },

  

然后我们可以通过,Map<字母string, List<城市信息object>>这样来保存数据

//保存首字母对应的list
Map<String,List<Object>> patientDetectionMap = new HashMap<String,List<Object>>();
//保存所有的首字母

  

当你for循环的时候,发现这个城市,既满足国内城市,也满足热门城市,那么就会造成某条内容一样的城市信息fastJson数据的时候,出现:

$ref对象重复引用问题

那么怎么解决呢:

在你要JSON.toJsonString的时候加入

SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测

  

/**
 * fastjson中$ref对象重复引用问题
 * 
 * 介绍:
 * FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项,用来关闭引用检测。
 * 关闭引用检测后,重复引用对象时就不会被$ref代替,但是在循环引用时也会导致StackOverflowError异常。
 * 
 * 用法:
 * JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect);
 */

  

return JSON.toJSONString(list(你的数据), SerializerFeature.DisableCircularReferenceDetect);

  

原文地址:https://www.cnblogs.com/achengmu/p/10100744.html