fastjson返回字符串,特别处理常用小例

852 阅读2分钟

返回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));
	}
}