2016-04-27 24 views
2

私はRetrofitを使用していくつかのAPI呼び出しを行っています。特定のエンドポイントのために、返されるJSONは、ビットのようになります。改造、トップレベルのjsonオブジェクトの変更?

エンドポイント:api.example.com/1.0/userinfo?userid=7

返される応答は、ビットのようになります。

{ 
    "7":{ 
     "name":"george", 
     "age"="32" 
     } 

} 

基本的に、トップレベルのオブジェクトがどのような数でありますurlパラメータに渡されます(この例では7)。

このレスポンスをモデル化するJavaオブジェクトを作成するときに、このトップレベルオブジェクトをモデル化すると、名前が変更されてもgsonを使用するときに正しくマップされるようになりますか?

答えて

1

インタフェース:

@Get 
Call<Map<String,User>> getUserInfo(@Url String url); 

用途:

Map<String,User> response =getUserInfo("http://api.example.com/1.0/userinfo?userid=7"); 
User user = response.get("7"); 

"7" ユーザーIDで=?

インタフェース:

@Get("1.0/userinfo") 
Call<Map<String,User>> getUserInfo(@Query("userid")String userid); 

用途:

String userId = "7"; 
Map<String,User> response = Retrofit.Builder().baseUrl("http://api.example.com").create(ApiService.class).getUserInfo(userId).execute(); 
User user = response.get(userId);` 
+0

私は従わわかりません。なぜあなたは 'Map'を使うのですか?私はRetrofitを12回使用しましたが、通常はトップレベルのオブジェクトキーが同じになるようにjsonが構成されています。つまり、トップレベルのオブジェクトは '" userinfo ":{" id ":88}'のようなものになり、id変数を持つuserinfoのモデルクラスを作成します。しかし、この場合、トップレベルのオブジェクトが変更されるので、どのようにモデル化するのですか? – Orbit

関連する問題