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

如何在Kotlin中构造含点式键名的JSON请求体?

解决Kotlin中构造含点式键名JSON请求体的问题

嘿,这个问题我之前也踩过坑!Kotlin的标识符规则不允许属性名里包含小数点,所以直接写val user.parameter1 = parameter1肯定会报错。不过有几个实用的解决方案,能帮你生成想要的JSON结构:

方案一:使用Map构造请求体(快速直接)

如果你的请求体结构不算太复杂,直接用Map<String, Any>来构造是最省事的——因为Map的键可以是任意字符串,完全支持带点的格式:

// 假设user和parameter1是你已有的变量
val requestBody = mapOf(
    "user" to user,
    "parameters" to mapOf(
        "user.parameter1" to parameter1
    )
)

当你把这个Map序列化为JSON时,就能得到你想要的结果:

{ 
  "user": "...", 
  "parameters": { 
    "user.parameter1": "..." 
  } 
}

方案二:用数据类配合序列化注解(规范易用)

如果你的请求体结构比较复杂,或者需要强类型校验,推荐用数据类加上序列化库的注解来指定JSON键名。主流的序列化库(比如Gson、Jackson)都支持这个功能:

用Gson的@SerializedName注解

// 定义参数模型
data class Parameters(
    @SerializedName("user.parameter1") // 指定JSON键名
    val parameter1: String // 替换成你实际的类型,比如Int、Boolean等
)

// 定义请求体模型
data class RequestBody(
    val user: User, // 假设User是你自己的用户数据类
    val parameters: Parameters
)

// 创建请求体实例
val requestBody = RequestBody(user, Parameters(parameter1))

用Jackson的@JsonProperty注解

如果你用的是Jackson序列化库,语法类似,只是注解换成@JsonProperty:

data class Parameters(
    @JsonProperty("user.parameter1")
    val parameter1: String
)

data class RequestBody(
    val user: User,
    val parameters: Parameters
)

总结

  • 简单场景选Map方案:代码少,不需要额外定义类,快速实现需求;
  • 复杂/强类型场景选数据类+注解:结构清晰,易于维护,还能享受到Kotlin的类型校验优势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:04:34