gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:52 24 4
gpt4 key购买 nike

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

[
{
"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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com