json - 如何使用 Ktor 解析响应

标签 json kotlin ktor kotlin-multiplatform

我正在尝试在多平台项目中使用 Ktor 进行 Get 调用。这是代码:

private val client = HttpClient()

fun myCall(callback: (List<Film>) -> Unit) {

    viewModelScope.launch {
        val result:List<Film> = client.get {
            url("https://data.sfgov.org/resource/wwmu-gmzc.json")
        }
        callback(result)
    }
}
每次我提出这个请求时,应用程序都会关闭,而且我没有收到任何让我知道发生了什么的消息。如果不是将列表 Film 作为结果类型,而是将 String 放入,那么它可以工作并且我会收到一个电影列表,但是我想将其解析为我自己的对象,但我无法。
通话有问题吗?

最佳答案

对于 Ktor http 客户端 反序列化为您的自定义对象 ,您需要安装 JsonFeature在创建您的 http 客户端时,这需要 io.ktor:ktor-client-json添加了依赖项。

val client = HttpClient {
   install(JsonFeature)
}
然后根据您要使用的序列化程序(Ktor 支持 Gson Jackson Kotlinx.Serialization ,您需要添加相应的序列化程序的依赖项)。例如,如果您想使用 Gson ,您需要为 io.ktor:ktor-client-gson 添加依赖项.然后您的 API 响应将反序列化为您的 List<Film>目的。
val result: List<Film> = client.get {
   url("https://data.sfgov.org/resource/wwmu-gmzc.json")
}
更多关于 Ktor 的上述内容 documentation

关于json - 如何使用 Ktor 解析响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64537233/

相关文章:

kotlin - 将路由拆分为多个文件

java - Ktor 项目本地主机 :8080 refuses to connect

json - 快速获取JSON元素

python - 引用列表中的某些值

android - 属性委托(delegate)必须有一个 'getValue(ChatActivity, KProperty<*>)' 方法。以下功能都不适用 :

listview - 使用Kotlin的RecyclerView不能垂直放置单元

websocket - 如何识别 ktor websocket 连接丢失?

Java Spring MVC - 发送 JSON 请求正文错误

json - 触发 error404.json.twig

android - MVVM 架构 android 中的 Spinner 问题