我正在尝试解析从第三方API收到的JSON响应。
响应返回一个带有N个子对象的json对象。
子类都符合相同的模型/类,但子类的数量可以改变。
如果它是一个对象数组,这将是微不足道的,但我不确定如何使用一个包含N个对象的对象来实现。
我想我需要一个自定义的typeadapter,但是我似乎做不到。
下面是JSON:
"api":{
"results": 94
"leagues": {
"1":{
"league_id":"1"
"name":"2018 Russia World Cup"
"country":"World"
"season":"2018"
"season_start":"2018-06-14"
}
"2":{...}
"3":{...}
"4":{...}
...
"N":{...}
}
}
所以基本上它就是我试图解析的“联盟”对象。
我希望最后能有一台List<League>
例如,根对象可以具有以下模型:
class Api {
val results: Int
val leagues: List<League>
}
发布于 2018-12-28 10:34:06
就我个人而言,我会为leagues
类型选择一个Map<String, League>
(假设映射中的条目属于类League
)。
class Api {
val results: Int
val leagues: Map<String, League>
}
我认为这里要考虑的事情主要是关于我想的顺序。如果您需要维护条目的顺序,我不确定Moshi是自动执行还是需要使用特定的Map
实现来保证。
发布于 2019-01-07 19:44:59
您可以在自定义适配器中获取make联盟列表。
data class Api(val results: Int, val leagues: List<League>)
object LeagueListAdapter {
@FromJson fun fromJson(reader: JsonReader, leagueAdapter: JsonAdapter<League>): List<League> {
reader.beginObject()
val result = mutableListOf<League>()
while (reader.hasNext()) {
reader.skipName()
result += leagueAdapter.fromJson(reader)!!
}
reader.endObject()
return result
}
}
在构建您的Moshi实例(Moshi.Builder.add
)时,不要忘记添加适配器。
https://stackoverflow.com/questions/53956979
复制