如何通过Kotlin @SerializedName获取JSON嵌套的rendered字段值?
解决方案
要正确解析嵌套在title和content里的rendered字段,你需要针对JSON的嵌套结构定义对应的数据类,而非直接映射为String类型。具体操作如下:
1. 定义嵌套结构的数据类
先创建适配嵌套对象的类,用来接收rendered字段(content还包含protected字段,可按需保留):
// 通用类,同时适配title和content的结构 data class RenderedText( @SerializedName("rendered") val rendered: String?, @SerializedName("protected") val isProtected: Boolean? = null // 给默认值,避免title解析时出错 )
如果title和content的结构差异明显,也可以分开定义两个类:
data class TitleData( @SerializedName("rendered") val rendered: String? ) data class ContentData( @SerializedName("rendered") val rendered: String?, @SerializedName("protected") val isProtected: Boolean? )
2. 修改主数据类Icerik
将原来的baslik和icerik字段类型从String?替换为上面定义的嵌套类:
data class Icerik( @SerializedName("title") val baslik: RenderedText?, // 若分开定义则用TitleData? @SerializedName("content") val icerik: RenderedText?, // 若分开定义则用ContentData? @SerializedName("date") val tarih: String?, @SerializedName("jetpack_featured_media_url") val gorsel: String? )
3. 获取rendered字段值
解析完成后,通过嵌套类的属性直接提取目标值:
// 获取标题的rendered内容 val titleText = icerikItem.baslik?.rendered // 获取内容的rendered内容 val contentText = icerikItem.icerik?.rendered
原理说明
原数据类直接将title、content映射为String类型,但JSON中这两个字段是对象类型而非字符串,会导致解析失败或无法读取嵌套字段。通过定义匹配嵌套结构的数据类,序列化库(如Gson)才能正确解析层级关系,提取出rendered字段的值。
内容的提问来源于stack exchange,提问作者Kerim Berkay
相关产品推荐
相关产品推荐

