使用 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)
    }
}

在上面的代码中,我们使用 asJsonObjectJsonElement 转换为 JsonObject。然后,使用 get 方法获取字段的值,并使用 asStringasInt 转换为相应的类型。如果字段不存在,则使用空字符串或零作为默认值。

最后,使用自定义的 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 字段不存在,因此默认值为空字符串。

希望对你有帮助

kotlin 如何最简便的实现 使用 Gson 反序列化json不存在的字段设置默认值

原文地址: https://www.cveoy.top/t/topic/isLI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录