【发布时间】:2021-09-26 04:42:42
【问题描述】:
我正在尝试使用 Moshi + kotlin 解析一个设计不太好的 api 的 json。由于某些原因,它会将 71 等数字解析为 Double。
第 3 方 api 有一个对象列表,可能如下所示: {"foo":[[1234567000,12]]} // long, int 要么 {"foo":[[1234567000,"string",0,2]]} // long, string, int, int
由于 3rd 方 api,我有以下 kotlin 类:
@JsonClass(generateAdapter = true)
class D {
var foo: List<Any> // I use Any because it can be either String or Int or Long
}
在我的代码中,我做了类似的事情:
val moshi = Moshi.Builder().build()
val adapter = moshi.adapter(D::class.java)
var D d = adapter.fromJson("{\"foo\":[[1234567000,\"string\",0,2]]}")
var index = d.foo[2]
var value : Long = 0
// here I get an error: ClassCastException: java.lang.Double cannot be cast to java.lang.Long
value = d.foo[index]
但由于某种原因,Moshi 将 json 字符串中的整数转换为 Doubles 而不是 Int 或 Long。我该如何解决?
【问题讨论】:
-
你能转换一下吗? kotlinlang.org/api/latest/jvm/stdlib/kotlin/-double/…
value = d.foo[index].toLong() -
我没有尝试过,但由于我的情况下的 long 是时间戳,我不想冒险获得一个四舍五入的值。
-
我希望一个 long 值被视为 double 被强制转换回 long 不会有舍入错误。 IE。 123456789 将是 123456789.0,它将“四舍五入”回到 123456789。您应该能够通过单元测试来证明这一点。