{
"data":[{"compulsory_field": 1}, {"compulsory_field": 2}, {}]
}
通过gson转换为对象
data class Something(val compulsory_field: Int)
val somethingList = //gson parse the data
println(somethingList)
//[
// Something(compulsory_field = 1),
// Something(compulsory_field = 2),
// Something(compulsory_field = null) //Should not exists
//]
,我想摆脱第三项。将其转换为对象之后,是否可以这样做?还是只能在String
/ InputStream
时完成?我该怎么办?
谢谢!
编辑:澄清构造函数的作用,但是gson无法理解kotlin规则并注入了我无法在Kotlin中检查的对象
答案 0 :(得分:0)
如果您不喜欢空的物体,则将其移除。解析后,您应该总是可以做到的。但是请注意,在Kotlin中,列表是可变的还是不可变的。如果您收到一个不变的列表(使用“ listOf”构建),则必须构建一个仅包含所需元素的新列表。
https://kotlinlang.org/docs/reference/collections.html
编辑:好的,我知道您甚至无法解析json。在这种情况下,您可以尝试以下方法:
答案 1 :(得分:0)
我想出了一个难看的“解决方案” /解决方法,但我仍在寻找更好的答案(或者让项目切换到moshi codegen或其他,以先到者为准)
基本上,我只是再次复制每个对象,以确保它通过了kotlin提供的所有null安全检查
val somethingList = //gson parse the data
val fixedSomethingList = somethingList.mapNotNull {
try {
it.copy(compulsory_field = it.compulsory_field)
} catch (e: IllegalArgumentException) { //if gson inserted a null to a non-null field, this will make it surface
null //set it to null so that they can be remove by mapNotNull above
}
}
现在fixedSomethingList
应该干净。再次,非常hacky,但是可以用……