如何在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
相关产品推荐
相关产品推荐

