1. 程式人生 > >JSON.toJSONString中序列化空字串遇到的坑

JSON.toJSONString中序列化空字串遇到的坑

前言

最近在做系統Bug修復時遇到了一個問題,呼叫其他服務時傳遞的引數和自己預先的不一致,例如Map中有10條記錄,然後使用JSON.toJSONString 包裝後進行網路傳遞,但是通過除錯發現接收方只收到了5條資料。經過追溯發現原來JSON.toJSONString 這裡有坑。所以現在總結記錄一下。

FastJson簡介

首先,介紹一下fastjson。fastjson是由alibaba開源的一套json處理器。與其他json處理器(如Gson,Jackson等)和其他的Java物件序列化反序列化方式相比,有比較明顯的效能優勢。詳情可以參考fastjson提供的benchmark。

採坑例項

上面已經說到我遇到問題的描述了,下面直接看程式碼例項:

這裡箭頭指向的位置,因為sent-1 中的value為空,所以並未打印出來。
第二個使用:JSON.toJSONString(map, SerializerFeature.WriteMapNullValue) 指定序列化方式就打印出來了。

所以大家使用的時候一定切記這裡的坑。下面再看看fastJson一些預設一下屬性:

JSON.toJSONString 原始碼:

然後看下SerializerFeature屬性:

名稱 含義
QuoteFieldNames 輸出key時是否使用雙引號,預設為true
UseSingleQuotes 使用單引號而不是雙引號,預設為false
WriteMapNullValue 是否輸出值為null的欄位,預設為false
WriteEnumUsingToString Enum輸出name()或者original,預設為false
SortField 按欄位名稱排序後輸出。預設為false
WriteTabAsSpecial 把\t做轉義輸出,預設為false
PrettyForma 結果是否格式化,預設為false
WriteClassName 序列化時寫入型別資訊,預設為false。反序列化是需用到
...... ......

看到這裡大家可以針對自己的需求選擇不同序列化格式,更多SerializerFeature 請大家自行查閱。