[英]Android Java - Serialize json date from GSON
I am having trouble in serializing a json that has a date. 我在序列化具有日期的json时遇到麻烦。
I have looked over a few other questions and they don't seem to help. 我查看了其他一些问题,它们似乎无济于事。
This is an sample of the code 这是代码示例
String jsonString = { Date=2016-12-09T11:58:31 } Gson myGson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create(); MyClass myClass = myGson.fromJson(jsonString, MyClass.class);
I get the following stack trace 我得到以下堆栈跟踪
Process: com.apacheapps.prang, PID: 22543
com.google.gson.JsonSyntaxException: 2016-12-09T11
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:107)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:82)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:35)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.text.ParseException: Unparseable date: "2016-12-09T11" (at offset 13)
at java.text.DateFormat.parse(DateFormat.java:579)
at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:105)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:82)
at com.google.gson.DefaultDateTypeAdapter.deserialize(DefaultDateTypeAdapter.java:35)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.Gson.fromJson(Gson.java:803)
at com.google.gson.Gson.fromJson(Gson.java:768)
at com.google.gson.Gson.fromJson(Gson.java:717)
at com.google.gson.Gson.fromJson(Gson.java:689)
at at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:7229)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
The java.text error is Unparseable date - "2016-12-09T11" (at offset 13) which makes me think that the date is being cut off at the colon between HH:mm. java.text错误是不可解析的日期-“ 2016-12-09T11”(在偏移量13处),这使我认为该日期在HH:mm之间的冒号处被截断。
I have done the exact same method on a number of times in different activities using the same class and it works fine. 我使用相同的类在不同的活动中多次执行完全相同的方法,并且效果很好。 This is completely baffling me.
这完全让我感到困惑。
I would appreciate any help. 我将不胜感激任何帮助。
Thanks 谢谢
Edit 编辑
As pointed out by ΦXocę and Monish, by json uses equals rather than key-val notation. 正如ΦXocę和Monish所指出的那样,json通过使用equals而不是key-val表示法。
This is causing the issue. 这是引起问题的原因。
For brevity I didn't initially explain the complete process. 为简洁起见,我最初没有解释完整的过程。 This is how it looks.
这就是它的样子。
The response from the api looks like this api的响应如下所示
{"Status":true,"RecordsAffected":1,"Message":null,"OperationId":null,"Result":{"ID":2177,"Date":"2016-12-09T12:33:45"},"ErrorCode":0,"ExceptionMessage":null,"ExceptionStackTrace":null,"ExceptionInnerMessage":null,"ExceptionInnerStackTrace":null}
This is serialized into a JsonWrapper class 这被序列化为JsonWrapper类
public class JsonWrapper{
public Object Result;
boolean Status;
public String getDisplayName() {
return Result.toString();
}
} }
getDisplayName returns the below getDisplayName返回以下内容
{ID=2177.0, Date=2016-12-09T12:33:45}
I then go on to serialize this into the necessary class. 然后,我继续将其序列化为必要的类。
This normally serialises to the standard key-val notation. 通常,这会序列化为标准键值符号。
It is working perfectly fine. 运行正常。 Your JSON is not valid.
您的JSON无效。
Just change this line 只需更改此行
String jsonString = { Date=2016-12-09T11:58:31 }
to 至
String jsonString = "{\\"Date\\":\\"2016-12-09T11:58:31\\"}";
String jsonString = "{\"Date\":\"2016-12-09T11:58:31\"}";
Gson myGson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss").create();
MyClass myClass = myGson.fromJson(jsonString, MyClass.class);
Log.d(getClass().getSimpleName(),"GSON deserialized date : " + myClass.getDate().toString());
Model class : 型号类别:
public class MyClass {
@SerializedName("Date")
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Output : GSON deserialized date : Fri Dec 09 11:58:31 GMT+05:30 2016 输出: GSON反序列化日期:2016年12月9日星期五11:58:31 GMT + 05:30
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.