如何用Gson与Kotlin解析含重复键的JSON?获取嵌套y字段值
解决Gson+Kotlin解析嵌套重复字段JSON的问题
这个问题我之前也碰到过,核心是你把外层y的类型搞错啦!你的JSON结构里,外层的y根本不是字符串,而是一个嵌套的JSON对象,直接定义成String?自然拿不到里面的y字段。
正确的实体类定义
你需要用两层数据类来对应这个嵌套结构,把层级关系理清楚:
import com.google.gson.annotations.Expose import com.google.gson.annotations.SerializedName data class OuterData( @Expose @SerializedName("y") val innerData: InnerData? // 外层的y对应这个嵌套对象 ) data class InnerData( @Expose @SerializedName("x") val x: String?, @Expose @SerializedName("y") val y: String? // 这里就是你要的嵌套y字段 )
解析代码示例
用Gson解析时,把JSON字符串转换成OuterData对象,就能轻松获取嵌套的y字段了:
import com.google.gson.GsonBuilder fun main() { val jsonStr = """{"y": {"x":"value", "y":"value"}}""" // 如果用到了@Expose,记得开启排除未标注字段的配置 val gson = GsonBuilder() .excludeFieldsWithoutExposeAnnotation() .create() val outerData = gson.fromJson(jsonStr, OuterData::class.java) // 获取嵌套的y字段值 val nestedYValue = outerData.innerData?.y println(nestedYValue) // 输出: value }
关键提醒
- 一定要注意JSON的层级:外层
y是对象类型,必须用对应的数据类接收,不能直接用字符串 - 只要实体类的层级和JSON结构完全对应,Gson就能自动把嵌套字段映射到对应的属性上
内容的提问来源于stack exchange,提问作者nix_
相关产品推荐
相关产品推荐

