在使用fastJson
时,如果想把一个map
转化成json
字符串(比如保存进redis
),即
JSON.toJSONString(map)
有一个地方要注意,如果map的值为null,那么转化后是会被扔掉的,如下图
解决方法
JSON.toJSONString(map, SerializerFeature.WriteMapNullValue) 以指定的序列化方式转化即可
可以看下toJSONString的源码
static final SerializeFilter[] emptyFilters = new SerializeFilter[0];
public static String toJSONString(Object object) {
return toJSONString(object, emptyFilters);
}
public static String toJSONString(Object object, SerializerFeature... features) {
return toJSONString(object, DEFAULT_GENERATE_FEATURE, features);
}
public enum SerializerFeature {
QuoteFieldNames, //输出key时是否使用双引号,默认为true
UseSingleQuotes, //使用单引号而不是双引号,默认为false
WriteMapNullValue, //是否输出值为null的字段,默认为false
WriteEnumUsingToString, //Enum输出name()或者original,默认为false
WriteEnumUsingName,
UseISO8601DateFormat,
WriteNullListAsEmpty,
WriteNullStringAsEmpty, //字段如果为null,输出为"",而非null ,然而还是null
WriteNullNumberAsZero, //字段如果为null,输出为0,而非null ,然而还是null
WriteNullBooleanAsFalse,
SkipTransientField,
SortField, //按字段名称排序后输出。默认为false
有兴趣的话,大家可以动手试下SerializerFeature的各种特性,因为。。。。。实际效果跟字面效果有点出入,比如下面这个,所以大家在敲代码的时候要注意,免得最后还要一步一步的调试