2016-06-28 29 views
1

現在我正在使用Gson將JSON反序列化爲對象。如何將JSON反序列化爲具有HashMap屬性的對象?

的JSON看起來是這樣的:

[ 
    { 
     "hash":"c8b2ce0aacede58da5d2b82225efb3b7", 
     "instanceid":"aa49882f-4534-4add-998c-09af078595d1", 
     "text":"{\"C_FirstName\":\"\",\"ContactID\":\"2776967\",\"C_LastName\":\"\"}", 
     "queueDate":"2016-06-28T01:03:36" 
    } 
] 

我的實體對象看起來是這樣的:

public class AppCldFrmContact { 
    public String hash; 
    public String instanceid; 
    public HashMap<String,String> text; 
    public String queueDate; 
} 

如果textString數據類型,一切都會好起來的。但是,我無法按照我的意願訪問不同的字段。

有沒有辦法將給定的JSON轉換爲我想要的對象?

我得到的錯誤是:Expected BEGIN_OBJECT but was STRING at line 1 column 174,這是可以理解的,如果它不能解析它。

的代碼做了解析:

Type listType = new TypeToken<List<AppCldFrmContact>>() { 
     }.getType(); 
List<AppCldFrmContact> contacts = gson.fromJson(response.body, listType); 
+1

顯示的'text'字段是一個包含JSON對象而不是JSON對象的字符串! – Robert

+0

如果它是一個JSON對象,它會是什麼樣子?那麼有沒有辦法解析給定的JSON給我想要的對象? –

回答

0

,因爲文本字段是一個JSON地圖系列化您收到此錯誤到字符串。如果它是一個實際的數據,而不僅僅是一個例子,你可以用@JsonDeserialize註釋一個字段並編寫你自己的定製JsonDeserializer<HashMap<String,String>>,這將使反序列化2次。

0

對於你所期望的結果,JSON數據應該有如下格式,

[ 
    { 
     "hash":"c8b2ce0aacede58da5d2b82225efb3b7", 
     "instanceid":"aa49882f-4534-4add-998c-09af078595d1", 
     "text":{"C_FirstName":"","ContactID":"2776967","C_LastName":""}, 
     "queueDate":"2016-06-28T01:03:36" 
    } 
] 
相關問題