我正在尝试解析从第三方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>
}
答案 0 :(得分:0)
我个人会选择Map<String, League>
类型的League
(假设地图中的条目为leagues
类)。
class Api {
val results: Int
val leagues: Map<String, League>
}
我认为这里要考虑的事情主要是关于我想的顺序。如果您需要维护条目的顺序,则不确定Moshi是否自动执行此操作,或者不确定是否需要使用Map
的特定实现来保证这一点。
答案 1 :(得分:0)
您可以在自定义适配器中获得联赛排名。
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
)时,请不要忘记添加适配器。