2016-11-30 6 views
4

私はRetrofitの初心者です。改造を使用して以下のJsonを解析する方法は? Retrofit2を想定しJSONの動的キーをパースアップする

{ 
    "data": { 
     "Aatrox": { 
     "id": 266, 
     "title": "a Espada Darkin", 
     "name": "Aatrox", 
     "key": "Aatrox" 
     }, 
     "Thresh": { 
     "id": 412, 
     "title": "o Guardião das Correntes", 
     "name": "Thresh", 
     "key": "Thresh" 
     } 
    }, 
    "type":"champion", 
    "version":"6.23.1" 
} 
+0

あなたはRetrofitを解析しません - あなたはGsonを非直列化/解析します。 –

+2

とにかく、 'data'はリストでなければなりません。したがって、「データ」:[{"name": "Aatrox"、...}、{"name": "Thresh"、...}] 'これは、Gson POJOクラスが期待する形式に適しています。 –

答えて

8

モデルのPOJOにMap<String, Champion>が含まれていると、逆シリアル化して動的キーを処理できます。

例:

public class ChampionData { 
    public Map<String, Champion> data; 
    public String type; 
    public String version; 
} 

public class Champion { 
    public int id; 
    public String title; 
    public String name; 
    public String key; 
} 

私はそれ以外にもレトロフィットに慣れていないんだけど、コメントの誰かが言ったように、デシリアライズはGsonによって行われます:

public ChampionData champions = new Gson().fromJson(json, ChampionData.class); 

だからへの構築に他の人の回答を投稿した場合は、GsonConverterFactoryを追加したものとします。

public interface API { 
    @GET("path/to/endpoint") 
    Call<ChampionData> getChampionData(); 
} 
1

は、あなたがする必要がある最初の事はあなたのRetrofitインスタンスを構築するときに、次の呼び出しです。

addConverterFactory(GsonConverterFactory.create())

は、その後、それはJSONにマップPOJO(例えばMyPojoClass)を書いた後、あなたのレトロフィット・インターフェースに次のようなものを追加するだけです。

Call<MyPojoClass> makeRequest(<some params>);

関連する問題