2016-04-27 5 views
2

私はRetrofitを使用してAPI呼び出しを行っています。トップレベルオブジェクトは、要求のクエリパラメータに応じて名前が付けられます。例えば、このような要求は:相続人最上位レベルのjsonオブジェクトの変更名

{"69":{ 
    "mix_id":"69", 
    "mix_title":"A Title", 
    "mix_file":"https:example.com/mp3", 
    "mix_genres":"House,Pop", 
    "mix_dj_id":"57", 
    "number_votes":"390", 
    "station":"1" 
    } 
} 

もちょっとフォーマットを示していることscreenie:基本的 http://prnt.sc/axltcd

を、依存

api.somewebsite.com/1.0/mix_info?mix_id=69

は、このような応答を返しますURLに渡された番号mix_id=は、応答で返される最上位Jsonオブジェクトの名前になります。

私は一緒にちょっと働く何かハックすることができました:私は、トップレベルのオブジェクトであるメンバ変数を持つモデル応答のクラスを持っている、と私は明示的に改修の@SerializedName(「69」)を使用

を名前を設定します。これは、もちろん、IDが69の要求に対してのみ機能します。そうでない場合、応答はnullオブジェクトを返します。それはこのようになります

:とにかく

public class Response { 

    @SerializedName("69") 
    private _69 _69; 
} 

、私は適切にこれらの奇妙なフォーマットされた応答を処理する方法を探しています。これはどのようにして行われますか?

+1

HashMapをシリアル化するとどうなりますか? – plalx

+0

..それについては – Orbit

+1

よく 'hashMap.put( 'yourKey'、yourData);シリアライズ(hashMap) ' – plalx

答えて

0

あなたはJsonElemenとして応答を受け取り、それをJsonObjectに変換し、送信要求に使用していたグローバル変数で要素を取得できます。

応答:

public void onResponse(Call<JsonElement> call, Response<JsonElement> response) { 
     JsonElement jsonElement = response.body(); 
     JsonObject jObj= jsonElement.getAsJsonObject(); 
     JsonObject number= jObj.get(CONSTANT_WHICH_YOU_USED_FOR_REQEST).getAsJsonObject(); 
} 

があれば私に尋ねること自由に感じ。

関連する問題