Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有效格式的json反序列化失败_Java_Json_Date - Fatal编程技术网

Java 有效格式的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

我有一个json文件,日期如下:

{
...
  "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更好的帮手)