如何从 Android 上的改造响应中获取嵌套的 JSON 对象和数组?

How to get nested JSON object and array from retrofit response on Android?

我想做的是使用改造

获取嵌套的JSON对象和数组形成网络响应

响应是:

{
"user": [
    {          
      "name": "Kaleigh Stamm",          
      "post": {
        "id": 1234,            
        "link": [
          "https://www.link1.com"
          "https://www.link2.com"
          "https://www.link3.com"
        ]
      }
    }
}

我可以毫无问题地获取名称,但我无法解析 post 对象,也无法解析 link 数组,它可能为空或有多个 links .我现在需要实施一些 post class 但不知道如何去做

我有一个用户class

class user {
    
    @SerializedName("name")
    var name = ""
    
}

我有接口

interface userService {
    @GET("baseurlinfo")
    fun getUserList() : Call<userResponse>
}

这是我的主要

var BaseUrl = "https://baseURL.com/"
    val retrofit = Retrofit.Builder()
            .baseUrl(BaseUrl)
            .addConverterFactory(GsonConverterFactory.create())
            .build()

    val service = retrofit.create(userService::class.java)

    val call = service.getUserList()
    call.enqueue(object : Callback<userResponse> {
        override fun onResponse(call: Call<userResponse>, response: Response<userResponse>) {
            if (response.code() == 200) {
                val userResponse = response.body()!!
                for( user in userResponse.user){
                    Log.v("MainActivity", user.name)
                }
            }
        }
        override fun onFailure(call: Call<userResponse>, t: Throwable) {
            Log.v("MainActivity", t.toString())
        }
    })

任何有关如何处理 JSON 回复的其余部分的帮助或建议都将非常有用,谢谢。

您的用户 class 不完整。先在本站JSON下方添加(json to pojo)。 然后获取 java class 然后将其粘贴到 android studio 中。然后 android studio 自动将其转换为 kotlin class。然后只需从创建的用户 class 获取您的链接。 另外,您的 JSON 格式不正确,应该如下所示:

{
"user": [
{          
  "name": "Kaleigh Stamm",          
  "post": {
    "id": 1234,            
    "link": [
      "https://www.link1.com",
      "https://www.link2.com",
      "https://www.link3.com"
    ]
  }
}
]
}

创建一个 post class 并从用户 class

调用它
class userPost {
    @SerializedName("id")
    private var mId: Int? = null

@SerializedName("link")
private var mLink: ArrayList<String>? = null

fun getId(): Int {
    return mId!!
}

fun setId(id: Int) {
    mId = id
}

fun getLink(): ArrayList<String> {
    return mLink!!
}

fun setLink(link: ArrayList<String>) {
    mLink= link
}

}

并在用户 class 上添加

@SerializedName("post")
    private var mPost: userPost? = null

    fun getPost(): userPost? {
        return mPost
    }

    fun setPost(post: userPost) {
        mPost = post
    }