java - gson 无法使用 GsonBuilder.setDateFormat ("yyyy-MM-dd' T'HH :mm:ss. SSSZ"进行解析"

标签 java json date gson simpledateformat

我从服务器得到这个字符串:

[
 {
  "title":"spoil the ones u love today",
  "startDateTime":"2014-08-10T20:10:36.7158Z"
 },
 {
  "title":"home made patisserie",
  "startDateTime":"2014-08-10T20:08:45.0218Z"
 }
]

然后我尝试将它解析为一个对象

    public class Offer implements Serializable {
        public String title;
        public Date startDateTime;
    }

Type collectionType = new TypeToken<ArrayList<Offer>>() {}.getType();

mOffersList.addAll((Collection<? extends Offer>) gson.fromJson(result, collectionType));

但是当我将“startDate”定义为日期时

我从 gson 返回的集合是空的

当我将“startDate”定义为字符串时

集合已正确填充。

我想更改它的日期格式。这就是为什么我更喜欢将其保存为 Date 对象。

我试过了

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ").create;

然而 Gson 无法将服务器的字符串解析为

日期开始日期时间mOffersList 中没有添加任何内容,它保持为空。

我做错了什么?

最佳答案

仅设置所需的 DateFormat 是不够的。

您需要定义 com.google.gson.JsonDeserializer 的实现。例如。

import java.lang.reflect.Type;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;

public class DateDeserializer implements JsonDeserializer<Date> {

  @Override
  public Date deserialize(JsonElement element, Type arg1, JsonDeserializationContext arg2) throws JsonParseException {
      String date = element.getAsString();

      SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
      format.setTimeZone(TimeZone.getTimeZone("GMT"));

      try {
          return format.parse(date);
      } catch (ParseException exp) {
          System.err.println("Failed to parse Date:", exp);
          return null;
      }
   }
}

然后注册上面的反序列化器:

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Date.class, new DateDeserializer());

关于java - gson 无法使用 GsonBuilder.setDateFormat ("yyyy-MM-dd' T'HH :mm:ss. SSSZ"进行解析",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25455123/

相关文章:

java - 如何使用线性回归模型进行预测?

Java-8 流 : Convert Map<String, List<List<DataType>>> 到 Map<String, List<DataType>>

java - 反序列化期间重复的字段

javascript - 使用带有单选选项的按钮自动填充表单

json - 编码不带引号的 json 数值

date - 日期格式 "YYYY-MM-DD HH:MM:SS"有名称吗?

r - R中两个日期之间的总和/计数

java执行器延迟不工作

php - 如何更改php中的时区?

java - em.persist 似乎不会在 postgreSQL 数据库上保留数据