当你有城市数据,你需要按国内、国际、热门城市分成数组的形式给出并输出为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>>这样来保存数据
//保存首字母对应的listMap
当你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);