如何通过 Wordpress REST API 在 Kotlin 中访问嵌套的 Json objects?

How to access nested Json objects in Kotlin through Wordpress REST API?

我正在为我的 WordPress 博客使用 Kotlin 构建一个应用程序, 我想从我的 WordPress 博客访问嵌套的 JSON object 值, 我可以访问 root id,userid。

假设我想访问渲染的标题。

JSON

"id": 1826,
"date": "2022-04-18T15:02:49",
"date_gmt": "2022-04-18T15:02:49",
"guid": {
"rendered": "https://example.com/?p=1826"
},
"modified": "2022-04-18T15:02:51",
"modified_gmt": "2022-04-18T15:02:51",
"slug": "to-android-heres-how",
"status": "publish",
"type": "post",
"link": "https://example.com/news/to-android-heres-how/",
"title": {
"rendered": "To Android: Here’s How"
},

这是我的数据class

套餐com.example.retrofitexample.dataclass

data class blogdata(
    val id: Int,
    val author: Int,
    val categories: List<Int>,
    val comment_status: String,
    val content: String,
    val date: String,
    val date_gmt: String,
    val excerpt: String,
.....
    val modified_gmt: String,
    val ping_status: String,
    val slug: String,
    val status: String,
    val sticky: Boolean,
    val template: String,
    val title: String,
  )

活动文件。 kt

  private fun getMyData() {
                val retrofitBuilder = Retrofit.Builder()
                    .addConverterFactory(GsonConverterFactory.create())
                    .baseUrl(BASE_URL)
                    .build()
                    .create(APIinterface::class.java)

                val retrofitData = retrofitBuilder.getData()

                with(retrofitData) {

                    enqueue(object : Callback<List<blogdata>?> {
                        override fun onResponse(
                            call: Call<List<blogdata>?>,
                            response: Response<List<blogdata>?>
                        ) {
                           val myStringBilder = StringBuilder()
                          for (myData in responseBody) {
                               myStringBilder.append(myData.id)
                               myStringBilder.append("\n")
                          }

                            val txtID = findViewById<TextView>(R.id.userId)
                         txtID.text = myStringBilder

                        }


                        override fun onFailure(call: Call<List<blogdata>?>, t: Throwable) {
                            Log.d(TAG, "onFailure:" + t.message)
                        }

我可以访问 parent object 详细信息,但不能访问嵌套的详细信息。

这里的 title 不是 string

的类型
"title": {
    "rendered": "To Android: Here&#8217;s How"
}

要访问嵌套数据,您必须为嵌套数据本身创建一个 data class,然后您可以将 variable 指定为此定义的类型 data class

创建一个名为 Titledata class(此名称可以是任何名称)

data class Title (
    val rendered: String
    )
    

在父级内部 data class 分配 title 为类型 Title

data class blogdata(
    val id: Int,
    val author: Int,
    val categories: List<Int>,
    val comment_status: String,
    val content: String,
    val date: String,
    val date_gmt: String,
    val excerpt: String,
.....
    val modified_gmt: String,
    val ping_status: String,
    val slug: String,
    val status: String,
    val sticky: Boolean,
    val template: String,
    val title: Title,
  )

当您使用 GsonConverter 时,您可能希望为 data class 的变量指定与 Json 中定义的变量不同的名称,如 Kotlin 如下 camelCaseJson 跟在 snake_case 之后,您可以使用 @SerializedName 为变量指定一个与 Json 对应的变量不同的名称。

就像 comment_status 一样,您可以这样做

@SerializedName("comment_status")
val commentStatus: String