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

FastJson簡介

fastjson是由alibaba開源的一套json處理器。
與其餘json處理器(如Gson,Jackson等)和其餘的Java對象序列化反序列化方式相比,有比較明顯的性能優點


1.使用 JSON.toJSONString 居然也有坑

今天,在對對象轉成JsonString的時候,對象有三個屬性,其中兩個有內容,一個爲 nulljava

踩坑實例


這裏箭頭指向的位置,由於 sent-1 中的 value爲空 ,因此並未打印出來。json

第二個使用:性能

JSON.toJSONString(map, SerializerFeature.WriteMapNullValue)

指定序列化方式就打印出來了。spa


2.將對象轉換成 JsonString 在fastJson 中有兩種方式

  1. 經過 JSON.toJSONString
  2. 經過 JSONObject.toJSONString


3. WriteNullStringAsEmpty 和 WriteMapNullValue 都可以將爲 null 的屬性顯示出來 , 而不是默認被忽略掉

System.out.println(JSON.toJSONString(message, SerializerFeature.WriteNullStringAsEmpty));
    System.out.println(JSON.toJSONString(message,SerializerFeature.WriteMapNullValue));
    
    {"data":null,"msg":" lankerens.com"}
    {"data":null,"msg":" lankerens.com"}



4.對規則的理解:⭐

SerializerFeature.WriteMapNullValue

是否輸出值爲 null 的字段, 默認爲falsecode

也就是說有null時會輸出而不是忽略(默認策略是忽略,因此看不到爲null的字段)對象


SerializerFeature.WriteNullStringAsEmpty

字符類型字段若是爲null,輸出爲 」「 , 而非nullrem

注意是字段是字段是字段 (即 屬性 ),而不是 json.put("key",null),因此用它時,字段爲null的能夠轉換爲空字符串字符串


若是讓輸出的json中全部爲null的字符串都變成空字符串,最簡單的作法就是加一個值過濾器,這樣就避免了有的字段爲null,有的字段爲空字符的現象。it


String a = null;
    System.out.println(JSON.toJSONString(a, SerializerFeature.WriteNullStringAsEmpty));
    
    {"a":""} / 而不是 {"a":null}
相關文章
相關標籤/搜索