上次把原生json替換成了fastjson,發生不少地方不兼容,對這個也作了一些總結:json
一、對於沒有賦值的變量處理,json-lib會根據類型給出相應初始值,而fastjson直接忽略這個字段。
解決方式:轉換時傳入兩個參數:SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty
加入WriteMapNullValue後,這個字段將不會被忽略,可是值是null,
加入WriteNullStringAsEmpty,將null改爲空字符串。
針對數字、布爾類型,還有WriteNullNumberAsZero、WriteNullBooleanAsFalse等。
二、對於斜槓的處理,json-lib會將「/」轉義成「\/」,而fastjson保持原樣。
解決方式:若是要讓fastjson對於斜槓進行轉義,在轉換時傳入參數:SerializerFeature.WriteSlashAsSpecial。
三、fastjson的引用,當List裏有多個元素的某些屬性值相同,後面元素的屬性會引用第一個元素的屬性,裏面的值會寫成相似$ref:$.members[0].reportTo的形式,這樣能夠減小數據量,可是有時候引用沒法被識別。
解決方式:轉換時傳入SerializerFeature.DisableCircularReferenceDetect參數,關閉引用,結果和json-lib的方式相同。
四、對於getter方法的識別。tYbdm這樣的字段,用MyEclipse自動生成的get方法是gettYbdm,json-lib可以識別,但fastjson不行。
解決方式:嚴格的駝峯命名方式,好比getTYbdm
或者在屬性上面加上@JSONField註解