Java 使用GSON分析包含日期的对象-不可解析日期
我有以下JSON数据-Java 使用GSON分析包含日期的对象-不可解析日期,java,android,gson,Java,Android,Gson,我有以下JSON数据- [ { "Name": "Litware, Inc. (sample)", "__type": "CRMService.Account", "Status": 0, "Owner": "abijeet patro", "AccountID": "e5259a52-672f-e311-a7d8-d89d6765b134", "RelationshipType": "Cus
[
{
"Name": "Litware, Inc. (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "e5259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Customer",
"Latitude": 32.85424041748047,
"LastActivity": {
"__type": "CRMService.Activity",
"Subject": "Testing",
"Type": "Phone Call",
"RegardingObjectType": "account",
"RegardingObjectId": "e5259a52-672f-e311-a7d8-d89d6765b134",
"EndTime": "/Date(1382898600000)/",
"Id": "b3cb43e1-963f-e311-9990-d89d676560dc",
"StartTime": "/Date(1382898600000)/"
},
"PhoneNumber": null,
"Longitude": -96.61327362060547,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
},
{
"Name": "A. Datum Corporation (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "f3259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Supplier",
"Latitude": 0,
"LastActivity": {
"__type": "CRMService.Activity",
"Subject": "Call back to understand the problem (sample)",
"Type": "Phone Call",
"RegardingObjectType": "account",
"RegardingObjectId": "f3259a52-672f-e311-a7d8-d89d6765b134",
"EndTime": "/Date(1381226400000)/",
"Id": "50b79458-672f-e311-a7d8-d89d6765b134",
"StartTime": "/Date(1381226400000)/"
},
"PhoneNumber": null,
"Longitude": 0,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
},
{
"Name": "Coho Winery (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "f5259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Investor",
"Latitude": 0,
"LastActivity": null,
"PhoneNumber": null,
"Longitude": 0,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
}
]
Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
CRMAccount[] lstCRMAccounts = gson.fromJson(serviceResponse.getResultMessage(),CRMAccount[].class);
我试图将其解析为以下Java类-
这是我用来解析JSON数据的代码-
[
{
"Name": "Litware, Inc. (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "e5259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Customer",
"Latitude": 32.85424041748047,
"LastActivity": {
"__type": "CRMService.Activity",
"Subject": "Testing",
"Type": "Phone Call",
"RegardingObjectType": "account",
"RegardingObjectId": "e5259a52-672f-e311-a7d8-d89d6765b134",
"EndTime": "/Date(1382898600000)/",
"Id": "b3cb43e1-963f-e311-9990-d89d676560dc",
"StartTime": "/Date(1382898600000)/"
},
"PhoneNumber": null,
"Longitude": -96.61327362060547,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
},
{
"Name": "A. Datum Corporation (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "f3259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Supplier",
"Latitude": 0,
"LastActivity": {
"__type": "CRMService.Activity",
"Subject": "Call back to understand the problem (sample)",
"Type": "Phone Call",
"RegardingObjectType": "account",
"RegardingObjectId": "f3259a52-672f-e311-a7d8-d89d6765b134",
"EndTime": "/Date(1381226400000)/",
"Id": "50b79458-672f-e311-a7d8-d89d6765b134",
"StartTime": "/Date(1381226400000)/"
},
"PhoneNumber": null,
"Longitude": 0,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
},
{
"Name": "Coho Winery (sample)",
"__type": "CRMService.Account",
"Status": 0,
"Owner": "abijeet patro",
"AccountID": "f5259a52-672f-e311-a7d8-d89d6765b134",
"RelationshipType": "Investor",
"Latitude": 0,
"LastActivity": null,
"PhoneNumber": null,
"Longitude": 0,
"OwnerID": "975504fb-cb94-498a-816c-6c3a5c62465a"
}
]
Gson gson = new GsonBuilder().setDateFormat(DateFormat.FULL, DateFormat.FULL).create();
CRMAccount[] lstCRMAccounts = gson.fromJson(serviceResponse.getResultMessage(),CRMAccount[].class);
这是LogCat的输出-
10-29 17:00:40.073: E/AndroidRuntime(17524): FATAL EXCEPTION: main
10-29 17:00:40.073: E/AndroidRuntime(17524): com.google.gson.JsonSyntaxException: /Date(1382898600000)/
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:81)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:66)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.DateTypeAdapter.read(DateTypeAdapter.java:41)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:72)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.Gson.fromJson(Gson.java:803)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.Gson.fromJson(Gson.java:768)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.Gson.fromJson(Gson.java:717)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.Gson.fromJson(Gson.java:689)
10-29 17:00:40.073: E/AndroidRuntime(17524): at osm.droid.mat.services.SyncService.OnTaskComplete(SyncService.java:97)
10-29 17:00:40.073: E/AndroidRuntime(17524): at osm.droid.mat.async.CallWebService.onPostExecute(CallWebService.java:70)
10-29 17:00:40.073: E/AndroidRuntime(17524): at osm.droid.mat.async.CallWebService.onPostExecute(CallWebService.java:1)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.os.AsyncTask.finish(AsyncTask.java:602)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.os.AsyncTask.access$600(AsyncTask.java:156)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.os.Handler.dispatchMessage(Handler.java:99)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.os.Looper.loop(Looper.java:154)
10-29 17:00:40.073: E/AndroidRuntime(17524): at android.app.ActivityThread.main(ActivityThread.java:4624)
10-29 17:00:40.073: E/AndroidRuntime(17524): at java.lang.reflect.Method.invokeNative(Native Method)
10-29 17:00:40.073: E/AndroidRuntime(17524): at java.lang.reflect.Method.invoke(Method.java:511)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
10-29 17:00:40.073: E/AndroidRuntime(17524): at dalvik.system.NativeStart.main(Native Method)
10-29 17:00:40.073: E/AndroidRuntime(17524): Caused by: java.text.ParseException: Unparseable date: "/Date(1382898600000)/" (at offset 0)
10-29 17:00:40.073: E/AndroidRuntime(17524): at java.text.DateFormat.parse(DateFormat.java:626)
10-29 17:00:40.073: E/AndroidRuntime(17524): at com.google.gson.internal.bind.DateTypeAdapter.deserializeToDate(DateTypeAdapter.java:79)
我将使用自定义反序列化器,这是因为您在日期解析方面存在问题,而且您的类没有无参数构造函数。我将我的示例仅限于
CRMActivity
类
public class CustomDeserializer implements JsonDeserializer<CRMActivity> {
public CRMActivity deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
if (json == null)
return null;
JsonObject jo = json.getAsJsonObject();
String type = jo.get("Type").getAsString();
String subject = jo.get("Subject").getAsString();
String endTimeAsString = jo.get("EndTime").getAsString();
String startTimeAsString = jo.get("StartTime").getAsString();
startTimeAsString = startTimeAsString.replace("/Date(", "").replace(")/", "");
endTimeAsString = endTimeAsString.replace("/Date(", "").replace(")/", "");
return new CRMActivity(type, new Date(Long.valueOf(startTimeAsString)),
new Date(Long.valueOf(endTimeAsString)), subject);
}
您将得到以下结果:
CRMActivity[类型=电话,主题=回电话了解
问题(示例),关于对象类型=帐户,起始时间=2008年10月2日星期二
2013年欧洲标准时间12:00:00,结束时间=2013年10月8日星期二12:00:00]
我已经找过了,找到了。但是没有一个具有与我相同格式的
JSON
数据。请将日期数据类型更改为字符串,因为您的数据格式不正确。我没有使用正确的“参数”进行搜索。我认为链接会很有帮助。查看此链接,了解Gson映射自定义的一般概述:有时可以通过GsonBuilder更简单地处理日期格式。setDateFormat
:(不适用于当前版本)(免责声明:我是作者:)