欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

解决fastJSON在格式化日期、处理空属性和单引号问题的方法

最编程 2024-08-03 20:33:01
...

经常遇到使用JSON格式化日期,可能需要转换的格式不同,一般有以下几种情况

1. 毫秒时间

2. 秒时间

3.格式化的时间

使用方式: String com.alibaba.fastjson.JSON.toJSONString(Object object)

1. 默认情况下,日期格式转换为 毫秒时间,如下

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		System.out.println(JSON.toJSONString(object));
        /*
        {"date":1599813582838}
        */
	}
}
class A {
	public Date date;
}

2. 如果需要到秒的格式,在Date类型的数据增加注解 @JSONField(format = "unixtime"),如果format='millis', 格式为毫秒,和默认相同,注解可以加在属性或者getter方法上

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		System.out.println(JSON.toJSONString(object));
        /*
        {"date":1599813715}
        */
	}
}

class A {
	@JSONField(format = "unixtime")
	public Date date;
}

3. 如果使用格式化之后的日期,可以在调用时传入SerializerFeature.WriteDateUseDateFormat,默认格式是:com.alibaba.fastjson.JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		System.out.println(JSON.toJSONString(object, SerializerFeature.WriteDateUseDateFormat));
        /*
            {"date":"2020-09-11 16:55:19"}
        */
	}
}
class A {
	public Date date;
}

如果自定义格式,有以下几种

a. 修改 com.alibaba.fastjson.JSON.DEFFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm",这样影响到所有的默认格式化日期转换

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		JSON.DEFFAULT_DATE_FORMAT = "yyyy/MM/dd HH:mm";
		System.out.println(JSON.toJSONString(object, SerializerFeature.WriteDateUseDateFormat));
        /*
        {"date":"2020/09/11 17:00"}
        */
	}
}

b. 在日期自动使用注解@JSONField(format = "yyyy-MM-dd HH:mm"),注解可以加在属性或者getter方法上,该方法对需要不同格式的日期比较有效

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		System.out.println(JSON.toJSONString(object));
        /*
           {"date":"2020-09-11 17:03"}
        */
	}
}
class A {
	@JSONField(format = "yyyy-MM-dd HH:mm")
	public Date date;
}

c. 转字符串时传入格式 JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm"),该方式方便修改本次调用的所有日期格式

public class EnjoyTest {

	@Test
	public void test() throws Exception {
		A object = new A();
		object.date = new Date();
		System.out.println(JSON.toJSONStringWithDateFormat(object, "yyyy-MM-dd HH:mm"));
        /*
        {"date":"2020-09-11 17:05"}
        */
	}
}

如果生成的字符串包含空属性,使用单引号或者其他,可以传入多个SerializerFeature对象

fastJSON格式化
QuoteFieldNames 属性使用引号,默认
UseSingleQuote 使用单引号,默认双引号
WriteMapNullValue 空值属性写入,默认不显示值为空的属性
WriteEnumUsingToString 枚举使用toString方法写入
WriteEnumUsingName 枚举使用名称
UseISO8601DateFormat 日期默认格式化
WriteNullListAsEmpty 值为null的list使用[]
WriteNullStringAsEmpty 值为null的string使用''
WriteNullNumberAsZero 值为null的数值使用0
WriteNullBooleanAsFalse 值为null的Boolean使用false
SkipTransientField 使用@Transient的属性不写入
SortField 属性排序
PrettyFormat 格式化输出的字符串
WriteClassName

返回的属性包含类型

"@type":"com.dev.test.job.A"

WriteDateUseDateFormat 使用日期格式化
IgnoreNonFieldGetter 没有getter则不写入属性
MapSortField map属性排序
.......  

 

maven

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.12</version>
</dependency>

 

推荐阅读