Java 使用GSON分析包含日期的对象-不可解析日期

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

我有以下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); 
我试图将其解析为以下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
:(不适用于当前版本)(免责声明:我是作者:)