如何在 Kotlin Android 中使用 Retrofit2 从 Json 对象获取列表
How to get List from Json Object using Retrofit2 in Kotlin Android
我试图使用 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"
}
]
}
这是我的模型Class
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 中获取这个学生数组?
您的回答是 object 而不是 Array 。因此,您应该创建将包含 List<Student>
的 Wrapper 对象。像这样的东西。
data class ApiResponse(val students: List<Student>)
@GET("abcd")
fun getStudents(@Query("token") token: String): Call<ApiResponse>
我试图使用 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"
}
]
}
这是我的模型Class
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 中获取这个学生数组?
您的回答是 object 而不是 Array 。因此,您应该创建将包含 List<Student>
的 Wrapper 对象。像这样的东西。
data class ApiResponse(val students: List<Student>)
@GET("abcd")
fun getStudents(@Query("token") token: String): Call<ApiResponse>