【问题标题】:Java Gson JsonSyntaxException caused by ParseException: Unparsable dateParseException 引起的 Java Gson JsonSyntaxException: Unparsable date
【发布时间】:2020-08-30 12:56:39
【问题描述】:

我知道在 StackOverflow 上有很多与此问题相关的问题(我已经为他们尝试了很多解决方案),但我一直 尝试了几个小时来解决这个问题,但我总是得到同样的错误。 我有 JSON 中的日期列表,当我尝试反序列化它时,出现以下错误:

com.google.gson.JsonSyntaxException: 2020-08-30
Caused by: java.text.ParseException: Unparseable date: "2020-08-30" at java.base/java.text.DateFormat.parse(DateFormat.java:396) at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79) .

我的代码:
格森:

private static Gson g = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd")
            .setPrettyPrinting()
            .serializeNulls()
            .create();

Java 类中的字段:
private List<Date> freeDates;

该字段的部分 JSON:
{"freeDates": ["2020-08-30", "2020-08-31", "2020-09-01", "2020-09-02"]}

我也尝试过其他日期格式,例如 ISO-8601 标准,但结果总是一样...
抱歉重复问题。
提前致谢!

更新: 我调用fromJson 方法的部分代码。这是我的 GenericRepository 类,所有 Repository 类都扩展了这个类。

public List<T> getAllEntities(String fileName){
        BufferedReader br = null;
        List<T> entities = new ArrayList<T>();
        try {
            br = new BufferedReader(new FileReader(fileName));
            String line;
            StringBuilder fileContent = new StringBuilder();
            
            while((line = br.readLine()) != null) {
                fileContent.append(line);
                if(line.trim().equals("END")) {
                    fileContent.delete(fileContent.length() - 4, fileContent.length());
                    T entity = g.fromJson(fileContent.toString(), type);
                    entities.add(entity);
                    fileContent.setLength(0);
                }else
                    fileContent.append("\n");       
            }
            
            return entities;
            
        }

【问题讨论】:

  • 能否补充一段代码,你在哪里调用fromJson方法?
  • 无法重现。当我用gson-2.8.5.jar测试它时工作正常
  • @AlexanderMakarov @AlexanderMakarov 我有 GenericRepository 类,所以所有 Repository 类都扩展它。 fromJson 方法在该类中。我已经用调用该方法的代码更新了我的问题。

标签: java json date serialization gson


【解决方案1】:

你的 Json 字符串必须有花括号:

String json = "{\"freeDates\": [\"2020-08-30\", \"2020-08-31\", \"2020-09-01\", \"2020-09-02\"]}";
Object converted = g.fromJson(json, Object.class);
System.out.println(converted);

【讨论】:

  • 感谢您的回答!我知道,JSON 格式正确,而且我有花括号。这只是类中 private List&lt;Date&gt; freeDates; 字段的 JSON 的一部分。
猜你喜欢
  • 2012-10-04
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2015-04-17
  • 2013-06-24
  • 1970-01-01
  • 2016-05-26
  • 2013-07-25
相关资源
最近更新 更多