郑州网站推广¥做下拉去118cr,一个app软件,门户网站例子,dede建设网站1、问题描述
有些场景下#xff0c;我们会选择用JSONObject代替Map来处理业务逻辑#xff0c;但是使用JSONObject时有一个需要注意的地方#xff1a;在处理JSONObject对象时#xff0c;引用的com.alibaba.fastjson.JSONObject#xff0c;在一个集合中#xff0c;循环给这…1、问题描述
有些场景下我们会选择用JSONObject代替Map来处理业务逻辑但是使用JSONObject时有一个需要注意的地方在处理JSONObject对象时引用的com.alibaba.fastjson.JSONObject在一个集合中循环给这个对象赋值会出现$ref: $ [0]它会认为是一个对象就出现$ref。
2、如何解决fastjson中$ref对象重复引用问题
FastJson提供了SerializerFeature.DisableCircularReferenceDetect这个序列化选项用来关闭引用检测。 关闭引用检测后重复引用对象时就不会被$ref代替但是在循环引用时也会导致StackOverflowError异常。 用法JSON.toJSONString(object, SerializerFeature.DisableCircularReferenceDetect); 3、举例说明
public static void main(String[] args) {JSONObject metricStatus new JSONObject();metricStatus.put(STATUS,4);metricStatus.put(UPDATED_AT,currentTime);JSONObject ciMetricObject new JSONObject();ciMetricObject.put(metric1,metricStatus);ciMetricObject.put(metric2,metricStatus);ciMetricObject.put(metric3,metricStatus);log.info(关闭引用检测前:{},JSON.toJSONString(ciMetricObject));log.info(多关闭引用检测后:{},JSON.toJSONString(ciMetricObject, SerializerFeature.DisableCircularReferenceDetect));}
关闭引用检测前:
{metric1:{STATUS:4,UPDATED_AT:20240521080808},metric2:{$ref:$.metric1},metric3:{$ref:$.metric1},
}
多关闭引用检测后:
{metric1:{STATUS:4,UPDATED_AT:20240521080808},metric2:{STATUS:4,UPDATED_AT:20240521080808},metric3:{STATUS:4,UPDATED_AT:20240521080808},
}