Retrofit,如何解析具有可变键的JSON对象

4

首先,我知道我的标题很糟糕,因为我没有想到更好的,我愿意听取建议。

我正在使用Retrofit从此类api获取数据:@GET("users/{userid}")

它运作良好,我很满意。但当我使用@POST("users/widget")并传递id列表时,就会出现问题,我得到以下回答:

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

"long_hash_id"通常是"525558cf8ecd651095af7954",它对应于附加到其上的用户ID。

当我没有使用retrofit时,我使用流模式中的Gson逐个获取每个用户。但我不知道如何告诉retrofit。

希望我表达清楚了,谢谢您提前。

----------- 解决方案:

我将我的接口制作成这样:

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

我只是提供了我的ID列表。非常感谢。


你想解析它吗?还是有什么问题? - Maraboc
是的,我想用 Retrofit 解析它,但目前我还没有使用 Retrofit。 - Renaud Favier
1个回答

7

Gson 能够处理类似您发布的具有变量键的 JSON 对象。在这种情况下,您需要声明一个 Map<String,ModelClass>,其中 ModelClass 是您想要表示的 JSONObject 的内容。


谢谢!我要声明给谁?我创建一个新的模型,只包含这个映射吗?也许你有一个链接或关键词可以帮我找到它? - Renaud Favier
请把你正在使用的代码,Retrofit接口声明和Model类发出来。我会试着指导你完成这个过程。 - Blackbelt
好的,我做到了,“jsonObjectToUrlEncodedString”在这种情况下接收JSON数组并将其转换为urlencode。 - Renaud Favier
目前我使用泛型,因为它是一种用于许多路由的方法,其工作方式相同。 - Renaud Favier
好的,非常感谢,它起作用了。我更新了我的标题和问题。 - Renaud Favier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接