Gson FastJson Jackson 处理 Date LocalDate LocalDateTime 日期类型JSON格式字符串
Gson 处理 Date LocalDate LocalDateTime 日期类型JSON格式字符串
要在使用Gson库进行属性为
Date
、LocalDate
和LocalDateTime
的对象的序列化和反序列化时,
可以使用注解来指定日期的格式化方式。Gson库支持@SerializedName
和@JsonAdapter
注解。
-
@SerializedName
注解:用于指定JSON属性的名称。可以将@SerializedName
注解应用在对象的属性上,指定对应的JSON属性名称。 -
@JsonAdapter
注解:用于指定自定义的JsonAdapter类。可以将@JsonAdapter
注解应用在对象的属性上,指定对应的JsonAdapter类来进行日期的格式化和反格式化。
下面是一个示例代码,演示如何使用注解来格式化输出属性为Date
、LocalDate
和LocalDateTime
的对象:
Gson 处理 Date 类型
准备javabean
package com.lihaozhe.json.gson;
import com.google.gson.annotations.JsonAdapter;
import com.lihaozhe.util.date.DateUtils;
import com.lihaozhe.util.json.gson.DateAdapter;
import com.lihaozhe.util.json.gson.LocalDateAdapter;
import com.lihaozhe.util.json.gson.LocalDateTimeAdapter;
import lombok.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author 李昊哲
* @version 1.0
* @create 2023/10/19
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
/**
* 账号
*/
private String account;
/**
* 密码
*/
private String password;
/**
* 姓名
*/
private String name;
/**
* 性别 1 代表男性 0 代表女性
*/
private int gender;
/**
* 入职时间
*/
@JsonAdapter(DateAdapter.class)
private Date hiredate;
/**
* 离职日期
*/
@JsonAdapter(DateAdapter.class)
private Date turnoverDate;
public Emp(String account, String password, String name, int gender) {
this.account = account;
this.password = password;
this.name = name;
this.gender = gender;
this.hiredate = new Date();
}
}
javabean转json格式字符串
Emp emp = new Emp("admin", "e10adc3949ba59abbe56e057f20f883e", "李昊哲", 1);
System.out.println(emp);
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
String json = gson.toJson(emp);
System.out.println(json);
结果如下:
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:10:18 CST 2023, turnoverDate=null,)
{"account":"admin","password":"e10adc3949ba59abbe56e057f20f883e","name":"李昊哲","gender":1,"hiredate":"2023-10-19 19:10:18"}
json格式字符串转javabean
Emp emp = new Emp("admin", "e10adc3949ba59abbe56e057f20f883e", "李昊哲", 1);
System.out.println(emp);
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
String json = gson.toJson(emp);
System.out.println(json);
Emp fromJson = gson.fromJson(json, Emp.class);
System.out.println(fromJson);
结果如下:
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:10:18 CST 2023, turnoverDate=null)
{"account":"admin","password":"e10adc3949ba59abbe56e057f20f883e","name":"李昊哲","gender":1,"hiredate":"2023-10-19 19:10:18"}
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:10:18 CST 2023, turnoverDate=null)
Gson 注解方式处理 Date LocalDate LocalDateTime
准备 DateAdapter
package com.lihaozhe.util.json.gson;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @author 李昊哲
* @version 1.0
* @create 2023/10/19
*/
public class DateAdapter implements JsonDeserializer<Date>, JsonSerializer<Date> {
private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override
public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(dateFormat.format(src));
}
@Override
public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return dateFormat.parse(json.getAsString());
} catch (Exception e) {
throw new JsonParseException(e);
}
}
}
准备 LocalDateAdapter
package com.lihaozhe.util.json.gson;
/**
* @author 李昊哲
* @version 1.0
* @create 2023/10/19
*/
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class LocalDateAdapter implements JsonDeserializer<LocalDate>, JsonSerializer<LocalDate> {
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
@Override
public JsonElement serialize(LocalDate src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(dateTimeFormatter.format(src));
}
@Override
public LocalDate deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return LocalDate.parse(json.getAsString(), dateTimeFormatter);
} catch (Exception e) {
throw new JsonParseException(e);
}
}
}
准备 LocalDateTimeAdapter
package com.lihaozhe.util.json.gson;
import com.google.gson.*;
import java.lang.reflect.Type;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author 李昊哲
* @version 1.0
* @create 2023/10/19
*/
public class LocalDateTimeAdapter implements JsonDeserializer<LocalDateTime>, JsonSerializer<LocalDateTime> {
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
@Override
public JsonElement serialize(LocalDateTime src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(dateTimeFormatter.format(src));
}
@Override
public LocalDateTime deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
return LocalDateTime.parse(json.getAsString(), dateTimeFormatter);
} catch (Exception e) {
throw new JsonParseException(e);
}
}
}
准备javabean
package com.lihaozhe.json.gson;
import com.google.gson.annotations.JsonAdapter;
import com.lihaozhe.util.date.DateUtils;
import com.lihaozhe.util.json.gson.DateAdapter;
import com.lihaozhe.util.json.gson.LocalDateAdapter;
import com.lihaozhe.util.json.gson.LocalDateTimeAdapter;
import lombok.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
/**
* @author 李昊哲
* @version 1.0
* @create 2023/10/19
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
/**
* 账号
*/
private String account;
/**
* 密码
*/
private String password;
/**
* 姓名
*/
private String name;
/**
* 性别 1 代表男性 0 代表女性
*/
private int gender;
/**
* 入职时间
*/
@JsonAdapter(DateAdapter.class)
private Date hiredate;
/**
* 离职日期
*/
@JsonAdapter(DateAdapter.class)
private Date turnoverDate;
/**
* 账号注册日期
*/
@JsonAdapter(LocalDateAdapter.class)
private LocalDate createDate;
/**
* 账号注册日期时间
*/
@JsonAdapter(LocalDateTimeAdapter.class)
private LocalDateTime createDateTime;
public Emp(String account, String password, String name, int gender) {
this.account = account;
this.password = password;
this.name = name;
this.gender = gender;
this.hiredate = new Date();
this.createDate = LocalDate.now();
this.createDateTime = LocalDateTime.now();
}
}
javabean转json格式字符串
Emp emp = new Emp("admin", "e10adc3949ba59abbe56e057f20f883e", "李昊哲", 1);
System.out.println(emp);
Gson gson = new Gson();
String json = gson.toJson(emp);
System.out.println(json);
结果如下:
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:20:29 CST 2023, turnoverDate=null, createDate=2023-10-19, createDateTime=2023-10-19T19:20:29.118)
{"account":"admin","password":"e10adc3949ba59abbe56e057f20f883e","name":"李昊哲","gender":1,"hiredate":"2023-10-19 19:20:29","createDate":"2023-10-19","createDateTime":"2023-10-19 19:20:29"}
json格式字符串转javabean
Emp emp = new Emp("admin", "e10adc3949ba59abbe56e057f20f883e", "李昊哲", 1);
System.out.println(emp);
Gson gson = new Gson();
String json = gson.toJson(emp);
System.out.println(json);
Emp fromJson = gson.fromJson(json, Emp.class);
System.out.println(fromJson);
结果如下:
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:20:29 CST 2023, turnoverDate=null, createDate=2023-10-19, createDateTime=2023-10-19T19:20:29.118)
{"account":"admin","password":"e10adc3949ba59abbe56e057f20f883e","name":"李昊哲","gender":1,"hiredate":"2023-10-19 19:20:29","createDate":"2023-10-19","createDateTime":"2023-10-19 19:20:29"}
Emp(account=admin, password=e10adc3949ba59abbe56e057f20f883e, name=李昊哲, gender=1, hiredate=Thu Oct 19 19:20:29 CST 2023, turnoverDate=null, createDate=2023-10-19, createDateTime=2023-10-19T19:20:29.118)
在上述代码中,定义了一个DataObject
类,包含了Date
、LocalDate
和LocalDateTime
类型的属性。
Date
类型的属性使用了@SerializedName
注解,将属性名称指定为date
。LocalDate
类型的属性使用了@JsonAdapter
注解,并指定了LocalDateAdapter
类作为自定义的JsonAdapter。LocalDateTime
类型的属性也使用了@JsonAdapter
注解,并指定了LocalDateTimeAdapter
类作为自定义的JsonAdapter。
LocalDateAdapter
和LocalDateTimeAdapter
类分别继承了com.google.gson.TypeAdapter
,并重写了write()
和read()
方法来实现日期的格式化和反格式化。
在write()
方法中,将日期对象转换为字符串,并使用JsonWriter
写入JSON。
在read()
方法中,读取JSON字符串,并将其转换为日期对象。
最后,使用Gson对象将DataObject对象序列化为JSON字符串,并打印输出。
需要注意的是,当使用自定义的JsonAdapter类时,需要将其注册到Gson对象中,以便Gson能够正确地使用它们进行日期的格式化和反格式化。
FastJson 处理 Date LocalDate LocalDateTime 日期类型JSON格式字符串
在使用FastJson进行格式化输出时,可以通过使用
@JSONField
注解来指定属性的日期格式化方式。
下面是一个示例代码,演示如何使用注解来格式化输出属性为Date
、LocalDate
和LocalDateTime
的对象:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class Main {
public static void main(String[] args) {
// 日期对象
DataObject dataObject = new DataObject(new Date(), LocalDate.now(), LocalDateTime.now());
// 序列化为JSON字符串
String json = JSON.toJSONString(dataObject);
System.out.println("JSON: " + json);
}
static class DataObject {
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date date;
@JSONField(format = "yyyy-MM-dd")
private LocalDate localDate;
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime localDateTime;
public DataObject(Date date, LocalDate localDate, LocalDateTime localDateTime) {
this.date = date;
this.localDate = localDate;
this.localDateTime = localDateTime;
}
}
}
在上述代码中,定义了一个DataObject
类,包含了Date
、LocalDate
和LocalDateTime
类型的属性。
Date
类型的属性使用了@JSONField
注解,并指定了日期格式为yyyy-MM-dd HH:mm:ss
。LocalDate
类型的属性使用了@JSONField
注解,并指定了日期格式为yyyy-MM-dd
。LocalDateTime
类型的属性使用了@JSONField
注解,并指定了日期格式为yyyy-MM-dd HH:mm:ss
。
通过在属性上使用@JSONField
注解,并指定format
属性来指定日期格式,FastJson会根据指定的格式对日期进行格式化输出。
最后,使用JSON.toJSONString()
方法将DataObject
对象序列化为JSON字符串,并打印输出。
Jackson 处理 Date LocalDate LocalDateTime 日期类型JSON格式字符串
在使用Jackson进行格式化输出时,可以通过使用
@JsonFormat
注解来指定属性的日期格式化方式。
下面是一个示例代码,演示如何使用注解来格式化输出属性为Date
、LocalDate
和LocalDateTime
的对象:
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
public class Main {
public static void main(String[] args) throws IOException {
// 日期对象
DataObject dataObject = new DataObject(new Date(), LocalDate.now(), LocalDateTime.now());
// 创建ObjectMapper对象
ObjectMapper objectMapper = new ObjectMapper();
// 序列化为JSON字符串
String json = objectMapper.writeValueAsString(dataObject);
System.out.println("JSON: " + json);
}
static class DataObject {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH-mm-ss", locale = "zh", timezone = "GMT+8")
@JsonSerialize(using = DateSerializer.class)
@JsonDeserialize(using = DateDeserializers.DateDeserializer.class)
private Date date;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", locale = "zh", timezone = "GMT+8")
@JsonSerialize(using = LocalDateSerializer.class)
@JsonDeserialize(using = LocalDateDeserializer.class)
private LocalDate localDate;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH-mm-ss", locale = "zh", timezone = "GMT+8")
@JsonSerialize(using = DateSerializer.class)
@JsonDeserialize(using = DateDeserializers.DateDeserializer.class)
private LocalDateTime localDateTime;
public DataObject(Date date, LocalDate localDate, LocalDateTime localDateTime) {
this.date = date;
this.localDate = localDate;
this.localDateTime = localDateTime;
}
}
}
在上述代码中,定义了一个DataObject
类,包含了Date
、LocalDate
和LocalDateTime
类型的属性。
Date
类型的属性使用了@JsonFormat
注解,并指定了日期格式为yyyy-MM-dd HH:mm:ss
,时区为GMT+8
。LocalDate
类型的属性使用了@JsonFormat
注解,并指定了日期格式为yyyy-MM-dd
。LocalDateTime
类型的属性使用了@JsonFormat
注解,并指定了日期格式为yyyy-MM-dd HH:mm:ss
。
通过在属性上使用@JsonFormat
注解,并指定pattern
属性来指定日期格式,Jackson会根据指定的格式对日期进行格式化输出。
最后,使用ObjectMapper
对象将DataObject
对象序列化为JSON字符串,并打印输出。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/188656.html