You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSON解析问题求助:无法获取constructorId等具体字段值

问题分析与解决方案

你遇到的核心问题是嵌套数据类的序列化匹配异常,导致内层Constructor的字段无法正确解析为非null值,以下是具体修复步骤:

1. 重构数据类结构:移除深层嵌套

嵌套过深的内部类会让序列化库(如Gson、Moshi)难以识别字段映射,建议将所有数据类改为顶级类:

// 顶级数据类,替代原嵌套结构
data class Teams(val MRData: MRData)

data class MRData(
    val ConstructorTable: ConstructorsTable,
    val limit: String,
    val offset: String,
    val series: String,
    val total: String,
    val url: String,
    val xmlns: String
)

data class ConstructorsTable(val Constructors: List<Constructor>?)

data class Constructor(
    val constructorId: String?,
    val name: String?,
    val nationality: String?,
    val url: String?
)

2. 显式指定字段映射(针对严格序列化场景)

如果使用Jackson或需要严格字段匹配,给每个字段添加注解明确对应JSON键名,避免大小写或命名规范差异:

import com.fasterxml.jackson.annotation.JsonProperty

data class Constructor(
    @JsonProperty("constructorId") val constructorId: String?,
    @JsonProperty("name") val name: String?,
    @JsonProperty("nationality") val nationality: String?,
    @JsonProperty("url") val url: String?
)

3. 适配序列化库的Kotlin支持

  • 若使用Gson:确保依赖包含Kotlin扩展,提升数据类兼容性:
    implementation("com.google.code.gson:gson:2.10.1")
    implementation("com.google.code.gson:gson-kotlin:2.10.1")
    
  • 若使用Moshi:添加代码生成器,避免反射解析的不确定性:
    implementation("com.squareup.moshi:moshi:1.15.0")
    ksp("com.squareup.moshi:moshi-kotlin-codegen:1.15.0")
    

4. 验证解析结果

用简化代码测试解析是否正常:

// 示例:使用Gson解析
val gson = Gson()
val jsonString = // 从API获取的JSON字符串
val teams = gson.fromJson(jsonString, Teams::class.java)

// 打印第一个构造器信息,验证字段是否非null
teams.MRData.ConstructorTable.Constructors?.firstOrNull()?.let {
    println("ID: ${it.constructorId}, 国籍: ${it.nationality}")
}

内容的提问来源于stack exchange,提问作者collapseCorpse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:57:27