詳解Java去除json數(shù)據(jù)中的null空值問題
1、描述
@JsonInclude(JsonInclude.Include.NON_NULL)標(biāo)記是jackson包提供的json序列化方法,已經(jīng)集成于Springboot2.0中,此方法的配置意在可以對實體json序列化的時候進行對應(yīng)的數(shù)值處理。
2、使用
用注解的方式放在標(biāo)記類或者屬性
@JsonInclude(JsonInclude.Include.NON_NULL) public class User implements Serializable { private String username; private String password; @JsonInclude(JsonInclude.Include.NON_NULL) private String token; }
用配置文件的方式全局配置(可能會影響到其他某些服務(wù)接口),例SpringBoot的application.yml
spring: jackson: default-property-inclusion: non_null
3、示例
- 使用前:{"username":"admin", "password":"admin123", "token":null}
- 使用后:{"username":"admin", "password":"admin123"}
PS:Java遞歸去除Json中的空值
package com.dunyun.openapi.util.json; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.dunyun.platform.util.StringUtil; public class RemoveNullAttr { public static void main(String[] args){ String s="{\"employees\": [{ \"firstName\":\"\" , \"lastName\":\"Doe\" },{ \"firstName\":\"\" , \"lastName\":\"Smith\" },{ \"firstName\":\"Peter\" , \"lastName\":\"Jones\" }]}"; String a="{ \"firstName\":\"John\" , \"lastName\":\"\" }"; String b="{ \"firstName\":\"\" , \"lastName\":\"Doe\" }"; String test="{\"ka\":\"va\",\"kb\":{\"kbk\":\"kbv\",\"kbkk\":\"\",\"kbkkk\":{\"aaa\":\"bbb\",\"bbb\":\"\"},\"suzu\":[{\"sz\":\"sz\",\"szk\":\"\"}]},\"kc\":\"kcv\"}"; JSONObject js=JSONObject.parseObject(test); RemoveNullAttr r=new RemoveNullAttr(); Object o=r.traverseJson(js); System.out.println(o); } private Object traverseJson(Object json) { // check null if (json == null) { return null; } try { if (json instanceof JSONObject) {// if json is a Map JSONObject jsonObj = (JSONObject)json; List keyList=new ArrayList(); for(String k:jsonObj.keySet()){ String value=jsonObj.get(k).toString(); if(StringUtil.isEmpty(value)){ keyList.add(k); //jsonObj.remove(k); }else{ if(isJsonObj(value)){ jsonObj.put(k, traverseJson(JSONObject.parseObject(value))); }else{if(isJsonArr(value)){ //value=; jsonObj.put(k, traverseJson(JSONArray.parseArray(value))) ; } } } } for(String k:keyList){ jsonObj.remove(k); } return jsonObj; } else if (json instanceof JSONArray) {// if json is an Array JSONArray jsonArr = (JSONArray)json; int len = jsonArr.size(); for (int i = 0; i < len; ++i) { // TODO: do something here jsonArr.set(i, traverseJson(jsonArr.get(i))); } // return retArr; // // } else {// if json is just a raw element // // // TODO: do something here // return json; return jsonArr; // } } catch (Exception e) { e.printStackTrace();// deal Exception or throw it } return null; } public boolean isJsonObj(Object o){ try{ JSONObject js=JSONObject.parseObject(o.toString()); return true; }catch(Exception e){ return false; } } public boolean isJsonArr(Object o){ try{ JSONArray js=JSONArray.parseArray(o.toString()); return true; }catch(Exception e){ return false; } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java Web使用簡單的批處理操作(記事本+Tomcat)
這篇文章主要介紹了Java Web使用簡單的批處理操作 ,需要的朋友可以參考下2014-10-10教你使用IDEA搭建spring源碼閱讀環(huán)境的詳細步驟
這篇文章主要介紹了使用IDEA搭建spring源碼閱讀環(huán)境的詳細步驟,本文分兩步通過實例圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-08-08Springboot如何基于assembly服務(wù)化實現(xiàn)打包
這篇文章主要介紹了Springboot如何基于assembly服務(wù)化實現(xiàn)打包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-06-06FeignClientFactoryBean創(chuàng)建動態(tài)代理詳細解讀
這篇文章主要介紹了FeignClientFactoryBean創(chuàng)建動態(tài)代理詳細解讀,當(dāng)直接進去注冊的方法中,一步步放下走,都是直接放bean的定義信息中放入值,然后轉(zhuǎn)成BeanDefinitionHolder,最后在注冊到IOC容器中,需要的朋友可以參考下2023-11-11解決@MapperScan和@Mapper共存之坑XxxMapper?that?could?not?be?fo
這篇文章主要介紹了解決@MapperScan和@Mapper共存之坑XxxMapper?that?could?not?be?found問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06