GSON – date格式
我试图在Gson输出中有一个自定义的date格式,但.setDateFormat(DateFormat.FULL)
似乎不工作,它与.registerTypeAdapter(Date.class, new DateSerializer())
。
这就像Gson不关心对象“Date”并打印它的方式。
我怎样才能改变呢?
谢谢
编辑:
@Entity public class AdviceSheet { public Date lastModif; [...] } public void method { Gson gson = new GsonBuilder().setDateFormat(DateFormat.LONG).create(); System.out.println(gson.toJson(adviceSheet); }
我总是使用java.util.Date
; setDateFormat()
不起作用:(
看来您需要为date和时间部分定义格式,或者使用基于string的格式。 例如:
Gson gson = new GsonBuilder() .setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").create();
或使用java.text.DateFormat
Gson gson = new GsonBuilder() .setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
或者用序列化程序来做:
我相信格式化器不能产生时间戳,但是这个序列化器/反序列化器对似乎工作
JsonSerializer<Date> ser = new JsonSerializer<Date>() { @Override public JsonElement serialize(Date src, Type typeOfSrc, JsonSerializationContext context) { return src == null ? null : new JsonPrimitive(src.getTime()); } }; JsonDeserializer<Date> deser = new JsonDeserializer<Date>() { @Override public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return json == null ? null : new Date(json.getAsLong()); } }; Gson gson = new GsonBuilder() .registerTypeAdapter(Date.class, ser) .registerTypeAdapter(Date.class, deser).create();
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").create();
以上格式对我来说似乎更好,因为它精确到毫秒。
编辑格式以引用“Z”
正如ML指出的,JsonSerializer在这里工作。 但是,如果要格式化数据库实体,请使用java.sql.Date注册您的序列化程序。 解串器是不需要的。
Gson gson = new GsonBuilder() .registerTypeAdapter(java.sql.Date.class, ser).create();
此错误报告可能与以下相关: http : //code.google.com/p/google-gson/issues/detail?id=230 。 尽pipe我使用1.7.2版本。
如果你讨厌内部类,通过利用函数接口,你可以在Java 8中用lambdaexpression式编写更less的代码。
JsonDeserializer<Date> dateJsonDeserializer = (json, typeOfT, context) -> json == null ? null : new Date(json.getAsLong()); Gson gson = new GsonBuilder().registerTypeAdapter(Date.class,dateJsonDeserializer).create();
你可以指定你的格式Gson gson = builder.setDateFormat("yyyy-MM-dd").create();
在这种方法,而不是yyyy-MM-dd
你可以使用任何其他格式
GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { return new Date(json.getAsJsonPrimitive().getAsLong()); } }); Gson gson = builder.setDateFormat("yyyy-MM-dd").create();
这根本不起作用。 JSON中没有datetypes。 我会build议序列化到ISO8601来回(格式不可知论者和JS compat)。 考虑你必须知道哪些字段包含date。
- 使用GSON将JSON样式属性名称转换为Java CamelCase名称
- Gson把一个数组对象变成json – Android
- 将JSON转换为Java
- 改造GSON将date从jsonstring序列化为java.util.date
- 使用GSON获取嵌套的JSON对象
- “parsingdate:1302828677828”试图用Gson反序列化从服务器收到的一个毫秒格式的date
- 无法在Android Retrofit库中为我的课程创build转换器
- GSON投掷“预计BEGIN_OBJECT,但是BEGIN_ARRAY”?
- 在android中使用GSONparsing带有dynamic“键”和“值”的JSON