kotlin 如何最简便的实现 使用 Gson 反序列化json不存在的字段设置默认值
使用 Gson 反序列化 JSON 并设置不存在字段的默认值可以通过自定义 Gson 的 JsonDeserializer 实现。下面是一个示例:
首先,创建一个数据类(例如 User 类)来表示 JSON 对象的结构:
data class User(val name: String, val age: Int, val email: String)
然后,创建一个自定义的 JsonDeserializer 类来处理反序列化和默认值设置:
import com.google.gson.*
import java.lang.reflect.Type
class UserDeserializer : JsonDeserializer<User> {
    override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): User {
        val jsonObject = json?.asJsonObject ?: throw JsonParseException("Invalid JSON")
        val name = jsonObject.get("name")?.asString ?: ""
        val age = jsonObject.get("age")?.asInt ?: 0
        val email = jsonObject.get("email")?.asString ?: ""
        return User(name, age, email)
    }
}
在上面的代码中,我们使用 asJsonObject 将 JsonElement 转换为 JsonObject。然后,使用 get 方法获取字段的值,并使用 asString 或 asInt 转换为相应的类型。如果字段不存在,则使用空字符串或零作为默认值。
最后,使用自定义的 UserDeserializer 来反序列化 JSON:
import com.google.gson.GsonBuilder
fun main() {
    val json = "{\"name\":\"John\",\"age\":30}"
    val gson = GsonBuilder().registerTypeAdapter(User::class.java, UserDeserializer()).create()
    val user = gson.fromJson(json, User::class.java)
    println(user)
}
在上面的代码中,我们使用 registerTypeAdapter 方法将 UserDeserializer 注册到 Gson 中,以便在反序列化时使用。然后,使用 fromJson 方法将 JSON 字符串转换为 User 对象。
如果 JSON 字段不存在,UserDeserializer 将设置相应字段的默认值。在上面的示例中,email 字段不存在,因此默认值为空字符串。
希望对你有帮助
原文地址: https://www.cveoy.top/t/topic/isLI 著作权归作者所有。请勿转载和采集!