2016-08-02 28 views
1

我是新手,嘗試從Android Studio的setlist.fm上使用Rest API,但在將我的GET請求結果放入我的Java時遇到一些問題數據模型。 特別是,我將「sets」(「set」是指在音樂會上演奏的一組作品)建模爲Java類。但通常,我從我的HTTP請求中返回結果,這些請求將「設置」爲空字符串或甚至數組。在Java中處理REST結果(json)中的不一致數據類型

我將爲所有電臺司令的setlists作爲一個例子這以下的GET請求: http://api.setlist.fm/rest/0.1/artist/a74b1b7f-71a5-4011-9441-d0b5e4122711/setlists.json

注意如何,在大多數情況下,「組」是一個對象。但在某些情況下,它是字符串。在其他情況下,它是陣列

我的Android工作室是給我下面的錯誤,當我嘗試使用下面的代碼行與GSON的JSON解析成我的數據模型:

gson.fromJson(result.toString(),Response.class); 

這似乎是在這樣的情況:「失敗集「顯示爲空串而不是對象:

Expected BEGIN_OBJECT but was STRING at line 1 column 942 path $.setlists.setlist[0].sets 

有沒有人有關於如何處理這種類型的事情的建議?我注意到了迄今爲​​止我所看過的所有藝術家。 謝謝!

+0

http://stackoverflow.com/a/28418787/5515371可能的重複 –

回答

0

使用instanceOf運算符來確定類型並進行相應的投射。

JSONObject response=new JSONObject(res); 
if(res.get("key") instanceOf JSONObject) 
{ 
// code for JSONObject 
} 
else if(res.get("key") instanceOf JSONArray) 
{ 
// code for JSONOArray 
} 
And so on 
2

假設Response是你寫包含JSON的主要領域的一類,並在某個點它,你必須:

@SerializedName("setlist") 
private List<MyItem> setlist; 

我還假設你MyItem類包含字段:

@SerializedName("sets") 
private List<MySet> sets; 

如果你讓Gson解析它,它會發現一個字符串而不是MySet對象的列表( - >數組)時失敗。

但是您可以write a custom TypeAdapter爲您的MyItem

有大量關於如何編寫Gson TypeAdapter的文檔,請查找它。