在協作開發時,從接口獲取到的json實體部分為空,但是在調試時發現原對象沒有任何問題,但是經過解析成為json后,部分屬性變為:
"$ref":"$.*******“
改變解析方式為Gson問題解決,經查是fastjson在解析json時,會將json中相同的內容改為引用導致
具體描述如下:
以下內容轉自:https://www.cnblogs.com/studyitskill/p/9081608.html
JSONArray 類型 如果我們往里面add數據的時候 如果數據相同,那么就會被替換成 $ref: 也就是被簡化了 因為數據一樣所直接 指向上一條數據
- "$ref":".." 上一級
- "$ref":"@" 當前對象,也就是自引用
- "$ref":"$" 根對象
- "$ref":"$.children.0" 基於路徑的引用,相當於 root.getChildren().get(0)
例如下面這3個銀行卡都是建行的,那么就會出現這個問題,因為bank信息完全一致
因為我們要在前端展示數據 所以這樣肯定不對 ,那么如果解決呢
網上都說是加上SerializerFeature.DisableCircularReferenceDetect
1 首先把JSONArray 轉成string 這個時候加上SerializerFeature.DisableCircularReferenceDetect
JSONArray.toJSONString(userBankJsonArray, SerializerFeature.DisableCircularReferenceDetect)
2 因為之前是JSON格式的 所以我們還要把string轉成JSON
JSONObject.parse(JSONArray.toJSONString(userBankJsonArray, SerializerFeature.DisableCircularReferenceDetect))
然后在傳到前端 前端解析就沒問題了