Last.fmのWebAPIから受け取ったJSONフォーマットのレスポンスをGSONライブラリで
Javaオブジェクトにマッピングしているのですが、WebAPIの方で検索結果が1件の時と複数の時で
異なったフォーマットで返却され、例外が発生してしまいます。
・検索結果が複数件の場合(artist:が配列になっている)
lang
1artistmatches: { 2artist: [ 3{ 4name: "電気グルーヴ - 石野卓球", 5listeners: "5", 6mbid: "", 7url: "http://〜", 8streamable: "0", 9image: [] 10}, 11{...}, 12{...}, 13{...} 14] 15}
・検索結果が1件の場合(artist:は配列ではない)
lang
1artistmatches: { 2artist: { 3name: "ももいろクローバー x 電気グルーヴ x スチャダラパー", 4listeners: "3", 5mbid: "", 6url: "http://〜", 7streamable: "0", 8image: [] 9} 10}
配列の場合と単一オブジェクトの場合で上手いことマッピングする手段はあるのでしょうか。
GSON以外のライブラリで上手くいくなど情報があれば教えていただけると助かります。
・マッピング
lang
1Gson gson = new Gson(); 2ArtistSearchResult result = gson.fromJson(json, ArtistSearchResult.class);
・Javaオブジェクト
lang
1import java.util.List; 2 3import com.google.gson.annotations.SerializedName; 4 5public class ArtistSearchResult { 6 7 public Results results; 8 9} 10 11class Results { 12 13 @SerializedName("opensearch:Query") 14 public Query query; 15 16 @SerializedName("opensearch:totalResults") 17 public int totalResults; 18 19 @SerializedName("opensearch:startIndex") 20 public int startIndex; 21 22 @SerializedName("opensearch:itemsPerPage") 23 public int itemsPerPage; 24 25 public Artistmatches artistmatches; 26 27} 28 29class Query { 30 public String searchTerms; 31 public int startPage; 32} 33 34class Artistmatches { 35 public List<Artist> artist; //配列の場合 36// public Artist artist; //単一の場合 37} 38 39class Artist { 40 public String name; 41 public int listeners; 42 public String url; 43 public Image[] image; 44} 45 46class Image { 47 @SerializedName("#text") 48 public String text; 49 public String size; 50}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。