使用 Moshi 和 Retrofit 解析动态字符串对象
Parse object of dynamic string with Moshi and Retrofit
我有一个 JSON 如下所示。
{
"code": "success",
"response": {
"data": {
"xyz": "abc.pdf",
"abc: "efgh.pdf"
}
},
"message": "Files downloaded Successfully"
}
响应对象中的内部数据,键是动态的(xyz、abc 等)。我在改装转换器中使用 Moshi。我的数据类如下
data class RestResponse<T> (
val code: String,
val message: String,
val response: T
)
data class ProposalDownloadResponse(val data: DownloadData)
data class DownloadData(val list: Map<String, String>)
但我在解析后在列表中得到 null。 虽然我有数据。
Refrofit 函数如下
@POST
suspend fun downloadProposal(
@Url url: String,
@Header("accessToken") key: String,
@Body flightDetails: FlightDetails,
): GenericResponse<RestResponse<ProposalDownloadResponse>>
原因是您正在嵌套不需要的对象。您的 data
本身属于 Map<String, String>
类型,因此 DownloadData
不是必需的。
如下使用。
data class ProposalDownloadResponse(val data: Map<String, String>)
我有一个 JSON 如下所示。
{
"code": "success",
"response": {
"data": {
"xyz": "abc.pdf",
"abc: "efgh.pdf"
}
},
"message": "Files downloaded Successfully"
}
响应对象中的内部数据,键是动态的(xyz、abc 等)。我在改装转换器中使用 Moshi。我的数据类如下
data class RestResponse<T> (
val code: String,
val message: String,
val response: T
)
data class ProposalDownloadResponse(val data: DownloadData)
data class DownloadData(val list: Map<String, String>)
但我在解析后在列表中得到 null。 虽然我有数据。
Refrofit 函数如下
@POST
suspend fun downloadProposal(
@Url url: String,
@Header("accessToken") key: String,
@Body flightDetails: FlightDetails,
): GenericResponse<RestResponse<ProposalDownloadResponse>>
原因是您正在嵌套不需要的对象。您的 data
本身属于 Map<String, String>
类型,因此 DownloadData
不是必需的。
如下使用。
data class ProposalDownloadResponse(val data: Map<String, String>)