使用JSON.toJSONString格式化成json字符串时保留null属性
目录
JSON.toJSONString格式化成json字符串时保留null属性
使用阿里的
com.alibaba.fastjson.JSON
格式化时,默认null属性会被过滤掉,可以设置不过滤null
public static String parseScriptJsonStringWithNullValue(Object obj) { if (obj == null || (obj instanceof Undefined)) { return null; } return JSON.toJSONString(obj, new SerializeFilter[]{scriptArrayFilter}, SerializerFeature.WriteMapNullValue); }
指定这个参数即可
SerializerFeature.WriteMapNullValue
属性说明
QuoteFieldNames
———输出key时是否使用双引号,默认为true
WriteMapNullValue
———是否输出值为null的字段,默认为false
WriteNullNumberAsZero
———数值字段如果为null,输出为0,而非null
WriteNullListAsEmpty
———List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty
———字符类型字段如果为null,输出为”“,而非null
WriteNullBooleanAsFalse
———Boolean字段如果为null,输出为false,而非null
例子
String ret = JSON.toJSONStringWithDateFormat(returnValue, "yyyy-MM-dd HH:mm:ss", SerializerFeature.PrettyFormat, // 保留map空的字段 SerializerFeature.WriteMapNullValue, // 将String类型的null转成"" SerializerFeature.WriteNullStringAsEmpty, // 将Number类型的null转成0 SerializerFeature.WriteNullNumberAsZero, // 将List类型的null转成[] SerializerFeature.WriteNullListAsEmpty, // 将Boolean类型的null转成false SerializerFeature.WriteNullBooleanAsFalse, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect );
处理返回结果中字段为空或为null,不展示字段的问题(字段展示不全)
package com.aiqin.mgs.market.api.config; import com.alibaba.fastjson.serializer.SerializerFeature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; /** * description: fastjson处理返回的参数为null、或者不返回 * date: 2019/11/22 15:03 * author: hantao * version: 1.0 * springboot 处理返回结果中字段为空或为null,不展示字段的问题(字段展示不全) */ @Configuration public class FastJsonConfiguration extends WebMvcConfigurationSupport { /** * 使用阿里 fastjson 作为JSON MessageConverter * @param converters */ @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter(); FastJsonConfig config = new FastJsonConfig(); config.setSerializerFeatures( // 保留map空的字段 SerializerFeature.WriteMapNullValue, // 将String类型的null转成"" SerializerFeature.WriteNullStringAsEmpty, // 将Number类型的null转成0 SerializerFeature.WriteNullNumberAsZero, // 将List类型的null转成[] SerializerFeature.WriteNullListAsEmpty, // 将Boolean类型的null转成false SerializerFeature.WriteNullBooleanAsFalse, // 避免循环引用 SerializerFeature.DisableCircularReferenceDetect); converter.setFastJsonConfig(config); converter.setDefaultCharset(Charset.forName("UTF-8")); List<MediaType> mediaTypeList = new ArrayList<>(); // 解决中文乱码问题,相当于在Controller上的@RequestMapping中加了个属性produces = "application/json" mediaTypeList.add(MediaType.APPLICATION_JSON); converter.setSupportedMediaTypes(mediaTypeList); converters.add(converter); } /** * 整合了swagger需要配置swagger拦截 * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("swagger-ui.html","index.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); registry.addResourceHandler("/static/**").addResourceLocations("classpath:/META-INF/resources/static/"); } }
/** 37 * 过滤器,发现传入的是null时,转化为"" 38 */ 39 ValueFilter filter = new ValueFilter() { 40 @Override 41 public Object process(Object obj, String s, Object v) { 42 if (v == null) 43 return ""; 44 return v; 45 } 46 }; 47 48 // 添加过滤器 49 System.out.println(JSONObject.toJSONString(jsonMap, filter));