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

如何在Kotlin中将JSON空响应映射为空字符串

解决Gson解析时缺失字段返回空字符串而非Null的问题

针对API返回中URL字段缺失导致url属性为null的情况,有以下几种可行方案:

方案一:利用Kotlin默认参数+Gson配置

修改数据类给url字段设置默认空字符串,同时配置Gson使其支持Kotlin数据类的默认参数:

internal class ImageResponse(
    @SerializedName("ID")
    val id: String,
    @SerializedName("URL")
    val url: String = ""
)

// 创建支持默认参数的Gson实例
val gson = GsonBuilder()
    .registerTypeAdapterFactory(KotlinTypeAdapterFactory())
    .create()

当API返回无URL字段时,Gson会自动用默认空字符串填充url属性。

方案二:自定义JsonDeserializer

编写自定义反序列化器,手动判断字段是否存在,不存在则返回空字符串:

class ImageResponseDeserializer : JsonDeserializer<ImageResponse> {
    override fun deserialize(
        json: JsonElement?,
        typeOfT: Type?,
        context: JsonDeserializationContext?
    ): ImageResponse {
        val jsonObj = json?.asJsonObject ?: throw JsonSyntaxException("Invalid JSON")
        val id = jsonObj.get("ID").asString
        val url = if (jsonObj.has("URL")) jsonObj.get("URL").asString else ""
        return ImageResponse(id, url)
    }
}

// 注册自定义反序列化器
val gson = GsonBuilder()
    .registerTypeAdapter(ImageResponse::class.java, ImageResponseDeserializer())
    .create()

方案三:手动处理Null值

将url改为可变属性,解析后手动替换null为空字符串:

internal class ImageResponse(
    @SerializedName("ID")
    val id: String,
    @SerializedName("URL")
    var url: String? = null
)

// 解析完成后处理
val response = gson.fromJson(jsonString, ImageResponse::class.java)
response.url = response.url ?: ""

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:35:13