簡體   English   中英

Gson從Json轉換為帶日期的arraylist

[英]Gson convert from Json to arraylist with date

當我包括數據庫中的時間戳字段時,我無法將json轉換為Java類型的arraylist。

請注意,如果沒有時間戳字段(其余字段,此處未顯示),則轉換效果很好。 只是當我嘗試在其下添加時間戳字段時,它以com.google.gson.JsonSyntaxException失敗。

我在這里看到了有關在GsonBuilder上使用setDateFormat的答案,例如GSON-日期格式

所以我嘗試了一下,但是無法正常工作。 我不確定在這種情況下我想要類型化數組列表的方法。 我發現的所有例子都不是那樣。

這是代碼:

Gson gson = new Gson();
        TypeToken<List<Resource>> token = new TypeToken<List<Resource>>() {
        };
        List<Resource> resources = gson.fromJson(response, token.getType());

映射對象具有以下字段:

private Timestamp created;
private Timestamp modified;

以及相應的獲取器和設置器:

 /**
     * @return the created
     */
    public Timestamp getCreated() {
        return created;
    }

    /**
     * @param created the created to set
     */
    public void setCreated(Timestamp created) {
        this.created = created;
    }

    /**
     * @return the modified
     */
    public Timestamp getModified() {
        return modified;
    }

    /**
     * @param modified the modified to set
     */
    public void setModified(Timestamp modified) {
        this.modified = modified;
    }

編輯:

根據要求,這是完整的異常消息(與我所知的一樣):

Exception in thread "AWT-EventQueue-0" com.google.gson.JsonSyntaxException: 2014-03-02 15:33:55
    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.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
    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 model.DataAccess.getResources(DataAccess.java:82)
    at se.expertinfo.ccmsliteplugin.PluginHelper.doSearch(PluginHelper.java:132)
    at views.SearchView.triggerSearchEvent(SearchView.java:227)
    at views.SearchView.valueChanged(SearchView.java:213)
    at javax.swing.JTree.fireValueChanged(JTree.java:2919)
    at javax.swing.JTree$TreeSelectionRedirector.valueChanged(JTree.java:3378)
    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(DefaultTreeSelectionModel.java:634)
    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(DefaultTreeSelectionModel.java:1092)
    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPaths(DefaultTreeSelectionModel.java:293)
    at javax.swing.tree.DefaultTreeSelectionModel.setSelectionPath(DefaultTreeSelectionModel.java:187)
    at javax.swing.JTree.setSelectionPath(JTree.java:1631)
    at javax.swing.plaf.basic.BasicTreeUI.selectPathForEvent(BasicTreeUI.java:2396)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(BasicTreeUI.java:3612)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressedDND(BasicTreeUI.java:3589)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(BasicTreeUI.java:3548)
    at java.awt.Component.processMouseEvent(Component.java:6502)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4489)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Caused by: java.text.ParseException: Unparseable date: "2014-03-02 15:33:55"
    at java.text.DateFormat.parse(DateFormat.java:357)
    at com.google.gson.DefaultDateTypeAdapter.deserializeToDate(DefaultDateTypeAdapter.java:105)
    ... 69 more

編輯2:

示例Json(非常簡短,實際結果很長,但是語法是相同的):

[
    {
        "id": "16",
        "title": "Warranty 43456",
        "created_by": "Anders Svensson",
        "modified_by": "Anders Svensson",
        "version": "1",
        "version_displayname": "1.0",
        "informationtype": "document",
        "filetype": "xml",
        "base_id": "uuid_03372934-a213-11e3-93de-2b47e5a489c2",
        "resource_id": "uuid_03372934-a213-11e3-93de-2b47e5a489c2",
        "created": "2014-03-02 15:33:55",
        "modified": "2014-03-02 15:34:51",
        "categories": "10,product,Audi A6;9,product,Audi A4;21,subject,Safety;8,product,Audi A3;21,subject,Safety;15,product,Volvo V70"
    },
    {
        "id": "22",
        "title": "Transportation 37337",
        "created_by": "Anders Svensson",
        "modified_by": "Anders Svensson",
        "version": "1",
        "version_displayname": "1.0",
        "informationtype": "document",
        "filetype": "xml",
        "base_id": "uuid_03372b96-a213-11e3-93de-2b47e5a489c2",
        "resource_id": "uuid_03372b96-a213-11e3-93de-2b47e5a489c2",
        "created": "2014-03-02 15:33:55",
        "modified": "2014-03-02 15:34:51",
        "categories": "10,product,Audi A6;12,product,BMW 320;11,product,BMW 120;13,product,BMW 520;8,product,Audi A3;19,subject,Transportation;9,product,Audi A4;19,subject,Transportation"
    }
]

為您的Gson對象設置適當的日期格式

Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();

否則,它將嘗試使用一些默認值,您可以在DateTypeAdapter類源代碼中找到這些默認值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM