FastJson、Jackson、Gson進行Java物件轉換Json的細節處理
Java物件轉換Json的細節處理
前言
Java物件在轉json的時候,如果物件裡面有屬性值為null的話,那麼在json序列化的時候要不要序列出來呢?對比以下json轉換方式
一、fastJson
1、fastJson在轉換java物件為json的時候,預設是不序列化null值對應的key的
也就是說當物件裡面的屬性為空的時候,在轉換成json時,不序列化那些為null值的屬性
具體案例如下:
AutoPartsSearchRequest 有以下屬性:
public static void main(String[] args) {
AutoPartsSearchRequest request = new AutoPartsSearchRequest();
request.setKeywords("123");
request.setSortingField("234242");
String str = JSONObject.toJSONString(request);//fastjson預設轉換是不序列化null值對應的key的
System.out.println(str);
}
輸出結果:{"keywords":"123","sortingField":"234242"} , 沒有序列化那些值為null的屬性
2、但是如果想把null對應的key序列化出來呢?
那就要仔細看看fastjson轉換java物件為json的時候的入參了:也就是這個方法:
JSONObject.toJSONString(Object object, SerializerFeature... features)
Fastjson的SerializerFeature序列化屬性:
QuoteFieldNames———-輸出key時是否使用雙引號,預設為true
WriteMapNullValue——–是否輸出值為null的欄位,預設為false
WriteNullNumberAsZero—-數值欄位如果為null,輸出為0,而非null
WriteNullListAsEmpty—–List欄位如果為null,輸出為[],而非null
WriteNullStringAsEmpty—字元型別欄位如果為null,輸出為”“,而非null
WriteNullBooleanAsFalse–Boolean欄位如果為null,輸出為false,而非null
public static void main(String[] args) {
AutoPartsSearchRequest request = new AutoPartsSearchRequest();
request.setKeywords("123");
request.setSortingField("234242");
String str = JSONObject.toJSONString(request, SerializerFeature.WriteMapNullValue);
System.out.println(str);
}
輸出結果如下:
3、想字元型別欄位如果為null,轉換輸出為”“,而非null ,需要多加一個引數:WriteNullStringAsEmpty, 案例如下:
public static void main(String[] args) {
AutoPartsSearchRequest request = new AutoPartsSearchRequest();
request.setKeywords("123");
request.setSortingField("234242");
String str = JSONObject.toJSONString(request, SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty);
System.out.println(str);
}
輸出結果如下:
二、Jackson
1、jackson預設是序列化null對應的key的,也就是說不管你物件屬性有沒有值,在轉換json的時候都會被序列化出來
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
AutoPartsSearchRequest request = new AutoPartsSearchRequest();
request.setKeywords("123");
request.setSortingField("234242");
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(request);
System.out.println(str);
//輸出結果(此處就不格式化了):{"sortingField":"234242","partsClassifyId":null,"partsSubClassifyId":null,"sortingDirection":null:......
}
2、同理,想要不序列化null也是可以的,具體如下:
1.實體上
@JsonInclude(Include.NON_NULL)
//將該標記放在屬性上,如果該屬性為NULL則不參與序列化
//如果放在類上邊,那對這個類的全部屬性起作用
//Include.Include.ALWAYS 預設
//Include.NON_DEFAULT 屬性為預設值不序列化
//Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
//Include.NON_NULL 屬性為NULL 不序列化
2.程式碼上
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
//通過該方法對mapper物件進行設定,所有序列化的物件都將按改規則進行系列化
//Include.Include.ALWAYS 預設
//Include.NON_DEFAULT 屬性為預設值不序列化
//Include.NON_EMPTY 屬性為 空(“”) 或者為 NULL 都不序列化
//Include.NON_NULL 屬性為NULL 不序列化
注意:只對VO起作用,Map List不起作用,另外jackson還能過濾掉你設定的屬性,具體的就各位自己去研究原始碼了
三、Gson
1、gson和fastjson一樣,預設是不序列化null值對應的key的,具體案例如下:
public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
AutoPartsSearchRequest request = new AutoPartsSearchRequest();
request.setKeywords("123");
request.setSortingField("234242");
Gson g = new GsonBuilder().create();
String str = g.toJson(request);
System.out.println(str);
//輸出結果:{"sortingField":"234242","keywords":"123"}
}
2、若是想序列化null值對應的key,只需要將以上建立程式碼改成以下程式碼就行:
Gson g = new GsonBuilder().serializeNulls().create();
3、若是想轉行null為空字串"",則需要手動處理了
具體參考:gson轉換null為空字串
相關的就寫到這了,有問題什麼的,歡迎提出疑問 歡迎加群:157797573
相關文章
- JSON解析器之Gson、FastJson、JacksonJSONAST
- Java JSON處理類庫JacksonJavaJSON
- Eclipse安裝GSON,使用GSON轉換Java Object到JSONEclipseJavaObjectJSON
- fastJson和jackson轉json的區別ASTJSON
- 使用Jackson在Java中處理JSONJavaJSON
- Java中使用Fastjson將JSON檔案轉物件JavaASTJSON物件
- Jackson Gson Json.simple 比較JSON
- FastJson 進行資料轉換的 實力ASTJSON
- java物件與json物件間的相互轉換Java物件JSON
- json解析效能比較(gson與jackson)JSON
- java json字串轉換為物件,轉換為listJavaJSON字串物件
- fastjson: json物件,json物件陣列,javabean物件,json字串之間的相互轉化ASTJSON物件陣列JavaBean字串
- gson 處理
- fastJson在java後臺轉換json格式資料探究ASTJSONJava
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- fastjson:物件轉化成json出現$refASTJSON物件
- Gson轉換 — json資料轉換為Object實體公共方法JSONObject
- json與gson工具轉換案例及區別JSON
- Java 異常處理中的種種細節!Java
- Android總結之json解析(FastJson Gson 對比)AndroidJSONAST
- fastjson轉換json時,碰到的那些首字母大小寫轉換的坑!ASTJSON
- FastJson--阿里巴巴公司開源的速度最快的Json和物件轉換工具ASTJSON阿里物件
- json字串和json格式物件的轉換JSON字串物件
- Gson簡明處理
- Java 下的 JSON庫效能比較:JSON.simple vs. GSON vs. Jackson vs. JSONPJavaJSON
- java 請求HTTP返回json集合,物件處理方式JavaHTTPJSON物件
- jquery+Ajax框架處理,XML,JSON,GSON物件傳送!詳解+案列!struts2的支援jQuery框架XMLJSON物件
- 資料轉換衝突及轉換過程中大物件的處理物件
- 關於Gson和FastJson的坑ASTJSON
- eval() JSON轉換為物件JSON物件
- Java SimpleDateFormat處理日期與字串的轉換JavaORM字串
- Android之Retrofit2.0 處理返回json報文並轉換成bean物件AndroidJSONBean物件
- js字串與json物件處理字串JSON物件
- java json和物件互相裝換JavaJSON物件
- Java Json API:Gson序列化JavaJSONAPI
- json字串與物件互相轉換JSON字串物件
- JSON資料解析:Gson(谷歌)和fastjson(阿里巴巴)的異同點JSON谷歌AST阿里
- [HandyJSON] 在Swift語言中處理JSON - 轉換JSON和ModelJSONSwift