json解析結果部分屬性為null的問題


在協作開發時,從接口獲取到的json實體部分為空,但是在調試時發現原對象沒有任何問題,但是經過解析成為json后,部分屬性變為:

"$ref":"$.*******“

改變解析方式為Gson問題解決,經查是fastjson在解析json時,會將json中相同的內容改為引用導致

 

具體描述如下:

以下內容轉自:https://www.cnblogs.com/studyitskill/p/9081608.html

JSONArray  類型  如果我們往里面add數據的時候 如果數據相同,那么就會被替換成 $ref:   也就是被簡化了 因為數據一樣所直接 指向上一條數據

 

循環引用:當一個對象包含另一個對象時,fastjson就會把該對象解析成引用。引用是通過$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))

然后在傳到前端  前端解析就沒問題了   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM