Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Retrofit, how to parse JSON objects with variable keys

First I know my title is bad as I didn't come up with better, I'm opened to suggestion.

I'm using retrofit to get data from an api of this kind : @GET("users/{userid}")

It works fine and I'm happy with it, the problem is when I call the same api with @POST("users/widget") with a list of ids. I have the following answer :

{
  "long_hash_id": {
    "_id": "long_hash_id"
    .......
  },
  "long_hash_id": {
    "_id": "long_hash_id",
    .....
  },
  ........
}

the "long_hash_id" is typicaly "525558cf8ecd651095af7954" it correspond to the id of the user attached to it.

When I didn't use retrofit, I used Gson in stream mode to get each user one by one. But I don't know how to tell retrofit.

Hope I'm clear and Thank you in advance.

----------- Solution :

I made my interface this way :

@FormUrlEncoded
@POST(AppConstants.ROUTE_USER_GROUP)
Call<Map<String,User>> getUsers( @Field("ids") List<String> param, @QueryMap Map<String,String> options);

and I simply gave my ArrayList of ids. Thank you very much

like image 435
Renaud Favier Avatar asked Mar 15 '23 04:03

Renaud Favier


1 Answers

Gson is able to deal with JSON objects with variable keys like the one you posted. What you have to do, in this case, is to declare a Map<String, ModelClass>, where ModelClass is the content of the JSONObject you want to represent

like image 162
Blackbelt Avatar answered Mar 16 '23 17:03

Blackbelt