用原语改造通用响应对象

Retrofit generic response object with primitives

在iOS中,响应不需要专门封装在一个对象中。这允许动态对象返回,您可以只引用您需要的特定对象(参见 Decode JSON to NSArray or NSDictionary)。 Android 中是否有使用改造的等效方法?

证明我有

"content":
  [   
    {
      "x":"1",
      "a":"b",
      "b":"c",
      "c":"d",
      "mark":"yes"
    }
  ] 

我会得到一个对象,我可以调用 object.x 得到 1,或者 object.a 得到 b。其中键名可以是任何原始对象。

做几个假设。假设您正在使用带有 gson 转换器的 retrofit 2。此外,您的 JSON 无效,我假设存在一个封闭对象 -

{
  "content":
    [   
      {
        "x":"1",
        "a":"b",
        "b":"c",
        "c":"d",
        "mark":"yes"
      }
    ]
}

在Java中,你想要Map。在你的例子中,你会有一个 Map 的数组。您可以这样定义封闭的 class --

public class Container {
    Map<String, Object> content[];
}

如果您知道所有值都将转为字符串,您也可以使用 Map<String, String>。您可以在改造调用中使用 Container 作为 return 类型。

@GET("/")
Call<Container> getSomething();

假设您将结果放入名为 container 的变量中,您可以使用 get.

访问这些字段
container.content[0].get("mark");

请注意,您需要添加适当的空值和边界检查。