Java 有效格式的json反序列化失败
我有一个json文件,日期如下:Java 有效格式的json反序列化失败,java,json,date,Java,Json,Date,我有一个json文件,日期如下: { ... "dob":"20001010", "registerdate":"20001010121212", ... } 我在课堂上使用: public class User implements Serializable { ... some other @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd public java.util.Date do
{
...
"dob":"20001010",
"registerdate":"20001010121212",
...
}
我在课堂上使用:
public class User implements Serializable {
... some other
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd
public java.util.Date dob; // this works
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
public java.util.Date registerdate;
}
然后在我的测试中,我使用Gson转换文件
User user = new Gson().fromJson("user.json", User.class);
但当这次跑步时,我得到:
com.google.gson.JsonSyntaxException: 20001010121212
I树ID:yyyyMMddHHmmss或yyyyMMddHHmmss或yyyyMMddHHmmss结果相同
pom:
com.google.code.gson
格森
2.8.5
如果您使用的是GSON,则需要解析日期,例如
import java.util.Date;
导入com.google.gson.gson;
导入com.google.gson.GsonBuilder;
公共类gsone示例{
私有静态字符串json=“{\r\n”+“\“dob\”:\“20001010121212\”\r\n“+”}”;
公共静态void main(字符串[]args){
Gson Gson=new GsonBuilder().setDateFormat(“yyyyymmddhhmmss”).create();
ItemDob ItemDob=gson.fromJson(json,ItemDob.class);
System.out.println(itemDob.getDob());
}
}
类ItemDob{
私人约会日期;
公开日期getDob(){
返回dob;
}
公共无效设置日期(日期日期){
this.dob=dob;
}
}
输出
2000年10月10日星期二12:12:12
编辑
如果要使用注释指定日期格式,请使用jackson。例如
import java.util.Date;
导入com.fasterxml.jackson.annotation.JsonFormat;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.JsonMappingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
公共类Jacksone示例{
私有静态字符串json=“{\r\n”+
“\“dob\”:\“20001010121212\”\r\n“+
"}";
公共静态void main(字符串[]args)抛出JsonMappingException、JsonProcessingException{
ItemDob ItemDob=newObjectMapper().readValue(json,ItemDob.class);
System.out.println(itemDob.getDob());
}
}
类ItemDob{
@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyyyMMddHHmmss”)
私人约会日期;
公开日期getDob(){
返回dob;
}
公共无效设置日期(日期日期){
this.dob=dob;
}
}
输出:
2000年10月10日星期二17:42:12
如果您使用的是GSON,则需要解析日期,例如
import java.util.Date;
导入com.google.gson.gson;
导入com.google.gson.GsonBuilder;
公共类gsone示例{
私有静态字符串json=“{\r\n”+“\“dob\”:\“20001010121212\”\r\n“+”}”;
公共静态void main(字符串[]args){
Gson Gson=new GsonBuilder().setDateFormat(“yyyyymmddhhmmss”).create();
ItemDob ItemDob=gson.fromJson(json,ItemDob.class);
System.out.println(itemDob.getDob());
}
}
类ItemDob{
私人约会日期;
公开日期getDob(){
返回dob;
}
公共无效设置日期(日期日期){
this.dob=dob;
}
}
输出
2000年10月10日星期二12:12:12
编辑
如果要使用注释指定日期格式,请使用jackson。例如
import java.util.Date;
导入com.fasterxml.jackson.annotation.JsonFormat;
导入com.fasterxml.jackson.core.JsonProcessingException;
导入com.fasterxml.jackson.databind.JsonMappingException;
导入com.fasterxml.jackson.databind.ObjectMapper;
公共类Jacksone示例{
私有静态字符串json=“{\r\n”+
“\“dob\”:\“20001010121212\”\r\n“+
"}";
公共静态void main(字符串[]args)抛出JsonMappingException、JsonProcessingException{
ItemDob ItemDob=newObjectMapper().readValue(json,ItemDob.class);
System.out.println(itemDob.getDob());
}
}
类ItemDob{
@JsonFormat(shape=JsonFormat.shape.STRING,pattern=“yyyyMMddHHmmss”)
私人约会日期;
公开日期getDob(){
返回dob;
}
公共无效设置日期(日期日期){
this.dob=dob;
}
}
输出:
2000年10月10日星期二17:42:12
基本上com.google.gson.gson不识别注释com.fasterxml.jackson.annotation.JsonFormat(两个不同的libs) 下面是另一个仅使用fasterxml库中的ObjectMapper的解决方案
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.Serializable;
import java.util.Date;
public class DemoApplication {
public static void main(String[] args) throws JsonProcessingException {
String json = "{\"dob\":\"20001010121212\"}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println(user.dob);
}
}
class User implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
public Date dob;
}
基本上com.google.gson.gson不识别注释com.fasterxml.jackson.annotation.JsonFormat(两个不同的libs) 下面是另一个仅使用fasterxml库中的ObjectMapper的解决方案
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.Serializable;
import java.util.Date;
public class DemoApplication {
public static void main(String[] args) throws JsonProcessingException {
String json = "{\"dob\":\"20001010121212\"}";
ObjectMapper objectMapper = new ObjectMapper();
User user = objectMapper.readValue(json, User.class);
System.out.println(user.dob);
}
}
class User implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMddHHmmss")
public Date dob;
}
请使用以下方式提供Gson libim版本:2.8.5
@JsonFormat
是Jackson注释,而不是Gson注释。如果类路径上已经有Jackson,请使用它将Json文本解析为用户
对象。@Andreas不确定该怎么办,那么我该怎么办?@yenk我已经告诉过你:使用Jackson进行解析。请使用2.8.5@JsonFormat
提供Gson libim版本是Jackson注释,而不是Gson注释。如果类路径上已经有Jackson,请使用它将Json文本解析为User
对象。@Andreas不确定该怎么办,那么我该怎么办?@yenk我已经告诉过你:使用Jackson进行解析。如果我有其他格式的日期,也可以使用它?@yenk否,所以。是,您必须为每个日期格式使用GsonBuilder创建新的Gson对象。但如果您想使用基于批注的日期格式,请使用jackson。如果我有其他格式不同的日期,也可以使用它吗?@yenk否,因此。是的,您必须使用GsonBuilder为每个日期格式创建新的Gson对象。但是如果你想使用基于注释的日期格式,请使用jackson.why I get:Tue Oct 10 05:12:12 PDT。。我应该得到:周二10月10日12:12:12 PDTI得到了它的工作,没有意识到PST对GMT duh!谢谢你的帮助(比@Andreas更好的助手)为什么我得到:星期二10月10日05:12:12 PDT。。我应该得到:周二10月10日12:12:12 PDTI得到了它的工作,没有意识到PST对GMT duh!谢谢你的帮助(比@Andreas更好的帮手)