用原语改造通用响应对象
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");
请注意,您需要添加适当的空值和边界检查。
在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");
请注意,您需要添加适当的空值和边界检查。