我正在尝试使用reddit JSON API.有一些帖子数据对象包含一个称为edited的字段,如果该帖子尚未被编辑,则可能为布尔值false;如果该帖子已被编辑,则可能为timestamp int.
I'm trying to work with the reddit JSON API. There are post data objects that contain a field called edited which may contain a boolean false if the post hasn't been edited, or a timestamp int if the post was edited.
有时是布尔值:
{ "edited": false, "title": "Title 1" }
{ "edited": false, "title": "Title 1" }
有时是一个int: { "edited": 1234567890, "title": "Title 2" }
Sometimes an int: { "edited": 1234567890, "title": "Title 2" }
当尝试解析POJO将字段设置为int的JSON时,出现错误:JsonDataException:期望为int但为BOOLEAN ...
When trying to parse the JSON where the POJO has the field set to int, I get an error: JsonDataException: Expected an int but was BOOLEAN...
我如何使用Moshi处理此问题?
How can I deal with this using Moshi?
推荐答案我也遇到了类似的问题,即我的字段有时是布尔值,有时是整数.我希望他们永远是整数.这是我用Moshi和Kotlin解决的方法:
I also ran into a similar problem where I had fields that were sometimes booleans, and sometimes ints. I wanted them to always be ints. Here's how I solved it with Moshi and kotlin:
@JsonQualifier @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.FIELD, AnnotationTarget.VALUE_PARAMETER, AnnotationTarget.FUNCTION) annotation class ForceToInt internal class ForceToIntJsonAdapter { @ToJson fun toJson(@ForceToInt i: Int): Int { return i } @FromJson @ForceToInt fun fromJson(reader: JsonReader): Int { return when (reader.peek()) { JsonReader.Token.NUMBER -> reader.nextInt() JsonReader.Token.BOOLEAN -> if (reader.nextBoolean()) 1 else 0 else -> { reader.skipValue() // or throw 0 } } } }
@JsonClass(generateAdapter = true) data class Discovery( @Json(name = "id") val id: String = -1, @ForceToInt @Json(name = "thanked") val thanked: Int = 0 )
更多推荐
处理一个有时为布尔值且有时为int的字段
发布评论