提问人:Artur Andruszkiewicz 提问时间:11/3/2023 更新时间:11/4/2023 访问量:23
在通过 ktor 从 api 获取数据期间使用 serializable
Use serializable during taking data from api via ktor
问:
我从api获取数据时遇到了问题。因为我的可序列化对象与数据类不同,我不知道我可以正确制作的方法。
如何从此 Json 数据中获取数据。我尝试通过 ktor 从 api 获取此内容,但在获取过程中遇到问题。我尝试获取的 Json 文件看起来像这样。
[
{
"email": "[email protected]",
"id": 123,
"user_name": "userName"
},
{
"email": "[email protected]",
"id": 1233,
"user_name": "userName2"
}
]
我尝试使用序列化程序,看起来像这样。
@Serializable
data class Users(
val userList: List<Department>
)
@Serializable
data class User(
val email: String,
val id: Int,
@SerialName("user_name")
val userName: String
)
我使用 ktor 获取数据。
val client = HttpClient(CIO) {
install(ContentNegotiation) {
json(
Json {
useArrayPolymorphism = true
}
)
}
}
和方法看起来像这样。
try {
val response: Users = client.get{
url(url)
}.body()
Log.d("getDataFromUrl", "${response.userList}")
} catch (e: Exception) {
Log.d("getDataFromUrl", "${e.message}")
}
答:
1赞
Shreyas Sparrow
11/4/2023
#1
我试过你的代码。这两项更改可能有助于解决此问题。
- 在“用户”数据类中将“部门”更改为“用户”数据类
从:
@Serializable
data class Users(
val userList: List<Department>
)
自:
@Serializable
data class Users(
val userList: List<User>
)
- 由于您的 json 数组不包含键,我认为这就是序列化无法解析 json 的原因。因此,请更改您的代码,如下所示
try {
val response: Users = client.get{
url(url)
}.body<List<User>>()
Log.d("getDataFromUrl", "${response.userList}")
} catch (e: Exception) {
Log.d("getDataFromUrl", "${e.message}")
}
评论