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

Kotlin解析JSON时data class主构造函数val/var参数报错解决

错误根源

Kotlin属性命名规范不允许标识符包含冒号:,你编写的val im:name: ImName会被编译器识别为「声明名为im的属性,类型为name」,但name既不是合法类型也不是合法的参数声明,因此触发data class主构造参数不合法的编译错误。

解决方案

由于你无法修改接口返回的JSON字段名,只需要通过序列化框架提供的字段映射注解,将合法的Kotlin属性名和JSON中带特殊字符的原始key做绑定即可,不需要改动接口返回结构。

首先先定义嵌套的ImName类,对应im:name字段的内部结构:

data class ImName(
    val label: String
)

根据你项目使用的JSON序列化框架,选择对应的注解写法即可:

  • 若使用Gson(Android生态最常用):用@SerializedName指定JSON原始字段名
import com.google.gson.annotations.SerializedName

data class Entry(
    @SerializedName("im:name")
    val imName: ImName
    // 其余带特殊字符的字段(比如im:artist、im:price等)都按该规则映射即可
)
  • 若使用Kotlin官方Kotlinx Serialization:用@SerialName指定JSON原始字段名,注意类需要加@Serializable注解
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Entry(
    @SerialName("im:name")
    val imName: ImName
)

@Serializable
data class ImName(
    val label: String
)
  • 若使用Jackson:用@JsonProperty指定JSON原始字段名
import com.fasterxml.jackson.annotation.JsonProperty

data class Entry(
    @JsonProperty("im:name")
    val imName: ImName
)

补充:所有JSON key包含Kotlin标识符不支持的特殊字符(冒号、横杠、空格、Kotlin关键字等)的场景,都可以用该方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:54:42