首页 > 解决方案 > 如何在 Kotlin Android 中使用 Retrofit2 从 Json 对象中获取列表

问题描述

我试图使用 Retrofit2 从以下 json 获取学生列表

{
   "students":[
      {
         "address":{
            "city":"DETROIT",
            "state":"MI",
            "street":"4904  Yorkshire Circle",
            "zip":"48228"
         },
         "school":"A B C D School",
         "name":"Mani Nezhad"
      },
      {
         "address":{
            "city":"RED HOOK",
            "state":"NY",
            "street":"1641  Custer Street",
            "zip":"12571"
         },
         "school":"X Y Z School",
         "name":"Jane Lindberg"
      }
   ]
}

这是我的模型类

data class Student(
    val name: String,
    val school: String,
    val address: Address
) {
    data class Address(val street: String, val city: String, val state: String, val zip: String)

这是用接口编写的方法:

    @GET("abcd")
    fun getStudents(@Query("token") token: String): Call<List<Student>>

但是每当我运行该应用程序时,我都会收到此错误

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

{我知道我试图从以大括号开头的 json 中获取数组。现在我的问题是如何从这种以大括号开头的 json 中获取这个学生数组?

标签: androidkotlinretrofit2

解决方案


您的回应是 object 而不是 Array 。因此,您应该创建将保存List<Student>. 像这样的东西。

    data class ApiResponse(val students: List<Student>)


@GET("abcd")
fun getStudents(@Query("token") token: String): Call<ApiResponse>

推荐阅读