这不是改造,而是 Firebase 消息处理程序服务中的手动解析。我在用KotlinJsonAdapterFactory()
当建造我的Moshi
实例。
由于某种原因,当我要求将其中一个节点解析为对象时,它认为其中一个节点是一个数组。这是 JSON:
[
{
"$": {
"updateOrigin": "CIS",
"requestSource": "at20",
"requestID": "0000000000004144"
},
"TS": [{
"$": {
"rid": "202008207681819",
"uid": "L81819",
"ssd": "2020-08-20"
},
"Location": [{
"$": {
"tpl": "PADTON",
"wtd": "17:28",
"ptd": "17:28"
},
"dep": [{
"$": {
"et": "17:28",
"src": "Darwin"
}
}
],
"plat": [{
"_": "2",
"$": {
"platsup": "true",
"cisPlatsup": "true",
"platsrc": "M"
}
}
]
}
]
}
]
}
]
这是我的数据类:
package com.cniekirk.traintimes.model
import com.squareup.moshi.Json
data class PushPortMessage(
val pushPortMessageItems: List<PushPortMessageItem>?
)
data class PushPortMessageItem(
@Json(name = "TS")
val tS: List<TS>?,
@Json(name = "$")
val messageAttrs: MessageAttrs?
)
data class TS(
@Json(name = "LateReason")
val lateReason: List<String>?,
@Json(name = "Location")
val location: List<Location>?,
@Json(name = "$")
val tsAttrs: TSAttrs?
)
data class MessageAttrs(
@Json(name = "updateOrigin")
val updateOrigin: String?
)
data class Location(
@Json(name = "arr")
val arr: List<Arr>?,
@Json(name = "dep")
val dep: List<Dep>?,
@Json(name = "pass")
val pass: List<Pass>?,
@Json(name = "plat")
val plat: List<Plat>?,
@Json(name = "$")
val stationAttrs: StationAttrs?
)
data class TSAttrs(
@Json(name = "rid")
val rid: String?,
@Json(name = "ssd")
val ssd: String?,
@Json(name = "uid")
val uid: String?
)
data class Arr(
@Json(name = "$")
val arrPassAttrs: List<ArrPassAttrs>?
)
data class Dep(
@Json(name = "$")
var depAttrs: DepAttrs?
)
data class Pass(
@Json(name = "$")
val arrPassAttrs: ArrPassAttrs?
)
data class Plat(
@Json(name = "_")
val platform: Int?,
@Json(name = "$")
val platAttrs: PlatAttrs?
)
data class PlatAttrs(
@Json(name = "platsup")
val platsup: Boolean?,
@Json(name = "cisPlatsup")
val cisPlatsup: Boolean?
)
data class StationAttrs(
@Json(name = "pta")
val pta: String?,
@Json(name = "ptd")
val ptd: String?,
@Json(name = "tpl")
val tpl: String?,
@Json(name = "wta")
val wta: String?,
@Json(name = "wtd")
val wtd: String?,
@Json(name = "wtp")
val wtp: String?
)
data class ArrPassAttrs(
@Json(name = "delayed")
val delayed: String?,
@Json(name = "et")
val et: String?,
@Json(name = "src")
val src: String?
)
data class DepAttrs(
@Json(name = "delayed")
val delayed: String?,
@Json(name = "et")
val et: String?,
@Json(name = "etUnknown")
val etUnknown: String?,
@Json(name = "etmin")
val etmin: String?,
@Json(name = "src")
val src: String?
)
我可能只是愚蠢,但我找不到问题所在。以下是我解析 JSON 的方式:
val pushPortMessage = data["body"]
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
val pushPortAdapter = moshi.adapter(PushPortMessage::class.java)
pushPortMessage?.let {
val msg = pushPortAdapter.fromJson(pushPortMessage)
println(msg)
}