如何通过 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’s How"
}
要访问嵌套数据,您必须为嵌套数据本身创建一个 data class
,然后您可以将 variable
指定为此定义的类型 data class
创建一个名为 Title
的 data 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
如下 camelCase
而 Json
跟在 snake_case
之后,您可以使用 @SerializedName
为变量指定一个与 Json
对应的变量不同的名称。
就像 comment_status
一样,您可以这样做
@SerializedName("comment_status")
val commentStatus: String
我正在为我的 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’s How"
}
要访问嵌套数据,您必须为嵌套数据本身创建一个 data class
,然后您可以将 variable
指定为此定义的类型 data class
创建一个名为 Title
的 data 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
如下 camelCase
而 Json
跟在 snake_case
之后,您可以使用 @SerializedName
为变量指定一个与 Json
对应的变量不同的名称。
就像 comment_status
一样,您可以这样做
@SerializedName("comment_status")
val commentStatus: String