2016-08-02 9 views
1

新しいですが、Android Studioのsetlist.fmでRest APIを使用しようとしていますが、GET要求の結果をJavaにフィッティングする際に問題があります。データ・モデル。 特に、私はJavaクラスとして "セット"( "セット"はコンサートで演奏されるセットを指す)をモデル化しました。しかし、一般的に、空の文字列または配列として「設定」されたHTTPリクエストから結果が返されます。ほとんどの部分は、「セット」はオブジェクトであるか、 http://api.setlist.fm/rest/0.1/artist/a74b1b7f-71a5-4011-9441-d0b5e4122711/setlists.jsonJavaのREST結果(json)で一貫性のないデータ型を処理する

お知らせ:

私は例として、すべてのレディオヘッドセットリストについては、この次のGET要求を使用します。しかし場合によっては文字列です。他の例では、アレイです。

私は次のコード行を使用して、私のデータモデルにGsonでJSONを解析しようとすると、私のAndroidのメーカーは私に次のエラーを与えている

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演算子を使用して型を判別し、それに従ってキャストします。

ResponseあなたはJSONの主なフィールドを含む、その中のいくつかの点であなたが持っていることを書いたクラスであると仮定すると、
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

:私もあなたのMyItemクラスはフィールドが含まれているとし

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

を:

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

Gsonを解析すると、MySetオブジェクトのリスト( - >配列)ではなく文字列が見つかると失敗します。

MyItemの場合はwrite a custom TypeAdapterとすることができます。

Gson TypeAdapterを書く方法については、たくさんのドキュメントがあります。

関連する問題