返回json字符串时,常用的处理方式,应用场景:如null值也返回字段,格式化日期格式等等
用到了SerializerFeature,SerializerFeature常用属性如下:
QuoteFieldNames
输出key时是否使用双引号,默认为true
UseSingleQuotes
使用单引号而不是双引号,默认为false
WriteMapNullValue
是否输出值为null的字段,默认为false
WriteEnumUsingToString
Enum输出name()或者original,默认为false
UseISO8601DateFormat
Date使用ISO8601格式输出,默认为false
WriteNullListAsEmpty
List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty
字符类型字段如果为null,输出为”“,而非null
WriteNullNumberAsZero
数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse
Boolean字段如果为null,输出为false,而非null
SkipTransientField
如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField
按字段名称排序后输出。默认为false
WriteTabAsSpecial
把\t做转义输出,默认为false
PrettyFormat
结果是否格式化,默认为false
WriteClassName
序列化时写入类型信息,默认为false。反序列化是需用到
DisableCircularReferenceDetect
消除对同一对象循环引用的问题,默认为false
WriteSlashAsSpecial
对斜杠’/’进行转义
BrowserCompatible
将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE 6,默认为false
WriteDateUseDateFormat
全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
DisableCheckSpecialChar
一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
package com.hope.note.fastjson;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.PropertyFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ValueFilter;
public class JsonUtil {
public static void main(String[] args) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "张三");
map.put("sex", "");
map.put("age", null);
map.put("add", "北京是海淀区苏州街地铁A口");
map.put("time", Calendar.getInstance());
System.out.println(JSONObject.toJSONString(map));
// json字符串格式化
System.out.println(JSONObject.toJSONString(map, SerializerFeature.PrettyFormat));
// 设置日期格式
JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
System.out.println(JSONObject.toJSONString(map, SerializerFeature.WriteDateUseDateFormat));
// 返回值为null的key
System.out.println(JSONObject.toJSONString(map, SerializerFeature.WriteMapNullValue));
// 处理多个类型
System.out.println(JSONObject.toJSONString(map, SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue, SerializerFeature.WriteDateUseDateFormat));
// 有些业务场景null值的key,返回"",可以用 值过滤器
System.out.println(JSONObject.toJSONString(map, new ValueFilter() {
@Override
public Object process(Object object, String name, Object value) {
if (null == value)
return "";
return value;
}
}));
// 有些场景,某些值需要单独处理,就用到了属性过滤器
System.out.println(JSONObject.toJSONString(map, new PropertyFilter() {
@Override
public boolean apply(Object object, String name, Object value) {
return "age".equals(name);
}
}, SerializerFeature.WriteMapNullValue));
}
}