詳解Java去除json數(shù)據(jù)中的null空值問(wèn)題
1、描述
@JsonInclude(JsonInclude.Include.NON_NULL)標(biāo)記是jackson包提供的json序列化方法,已經(jīng)集成于Springboot2.0中,此方法的配置意在可以對(duì)實(shí)體json序列化的時(shí)候進(jìn)行對(duì)應(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;
}
用配置文件的方式全局配置(可能會(huì)影響到其他某些服務(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;
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java?空和null的區(qū)別
- Java判斷object對(duì)象為空(包括null ,““)的方法
- 為什么Java項(xiàng)目中別用!=null做判空
- java?poi?讀取單元格null或者空字符串方式
- Java中l(wèi)ist集合為空或?yàn)閚ull的區(qū)別說(shuō)明
- JAVA8妙用Optional解決判斷Null為空的問(wèn)題方法
- Java不要再使用!=null判空了!
- Java判斷對(duì)象是否為空(包括null ,"")的方法
- java json不生成null或者空字符串屬性(詳解)
- 由@NotNull注解引出的關(guān)于Java空指針的控制
- java中判斷String類型為空和null的幾種方法
相關(guān)文章
深入理解Java設(shè)計(jì)模式之簡(jiǎn)單工廠模式
這篇文章主要介紹了JAVA設(shè)計(jì)模式之簡(jiǎn)單工廠模式的的相關(guān)資料,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2021-11-11
Java Web使用簡(jiǎn)單的批處理操作(記事本+Tomcat)
這篇文章主要介紹了Java Web使用簡(jiǎn)單的批處理操作 ,需要的朋友可以參考下2014-10-10
教你使用IDEA搭建spring源碼閱讀環(huán)境的詳細(xì)步驟
這篇文章主要介紹了使用IDEA搭建spring源碼閱讀環(huán)境的詳細(xì)步驟,本文分兩步通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-08-08
Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包
這篇文章主要介紹了Springboot如何基于assembly服務(wù)化實(shí)現(xiàn)打包,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
FeignClientFactoryBean創(chuàng)建動(dòng)態(tài)代理詳細(xì)解讀
這篇文章主要介紹了FeignClientFactoryBean創(chuàng)建動(dòng)態(tài)代理詳細(xì)解讀,當(dāng)直接進(jìn)去注冊(cè)的方法中,一步步放下走,都是直接放bean的定義信息中放入值,然后轉(zhuǎn)成BeanDefinitionHolder,最后在注冊(cè)到IOC容器中,需要的朋友可以參考下2023-11-11
解決@MapperScan和@Mapper共存之坑X(jué)xxMapper?that?could?not?be?fo
這篇文章主要介紹了解決@MapperScan和@Mapper共存之坑X(jué)xxMapper?that?could?not?be?found問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06

