Gson ignore null when deserializing object

前端 未结 3 1589
清歌不尽
清歌不尽 2021-01-02 08:13

I want to deserialize a json string that containts a null value in Java. I want to deserialize the object to a Properties object. The json string is something l

3条回答
  •  轮回少年
    2021-01-02 08:27

    We have this solution:

    1. All of your data classes need to extends abstract class

    abstract class PoJoClass
    

    2. Create this safe deserializer to delete nulls from JSON

    class SafeDeserializer(private val gson: Gson) :JsonDeserializer {
        override fun deserialize(json: JsonElement?, typeOfT: Type?, context: JsonDeserializationContext?): T {
    
            val jsonObject = json as JsonObject
            removeNullsFromJson(jsonObject)
            return gson.fromJson(jsonObject, typeOfT)
        }
    
        private fun removeNullsFromJson(jsonObject: JsonObject) {
            val iterator = jsonObject.keySet().iterator()
    
            while (iterator.hasNext()) {
                val key = iterator.next()
                when(val json = jsonObject[key]){
                    is JsonObject -> removeNullsFromJson(json)
                    is JsonNull -> iterator.remove()
                }
            }
        }
    }
    

    3. And register it in your GSON instance

    val gson = Gson().newBuilder()
                    .registerTypeHierarchyAdapter(PoJoClass::class.java, SafeDeserializer(Gson()))
                    .create()
    

提交回复
热议问题