首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何解析具有N个子对象的JSON

如何解析具有N个子对象的JSON
EN

Stack Overflow用户
提问于 2018-12-28 18:24:16
回答 2查看 502关注 0票数 0

我正在尝试解析从第三方API收到的JSON响应。

响应返回一个带有N个子对象的json对象。

子类都符合相同的模型/类,但子类的数量可以改变。

如果它是一个对象数组,这将是微不足道的,但我不确定如何使用一个包含N个对象的对象来实现。

我想我需要一个自定义的typeadapter,但是我似乎做不到。

下面是JSON:

代码语言:javascript
代码运行次数:0
运行
复制
"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>

例如,根对象可以具有以下模型:

代码语言:javascript
代码运行次数:0
运行
复制
class Api {
   val results: Int
   val leagues: List<League>
}
EN

回答 2

Stack Overflow用户

发布于 2018-12-28 18:34:06

就我个人而言,我会为leagues类型选择一个Map<String, League> (假设映射中的条目属于类League)。

代码语言:javascript
代码运行次数:0
运行
复制
class Api {
  val results: Int
  val leagues: Map<String, League>
}

我认为这里要考虑的事情主要是关于我想的顺序。如果您需要维护条目的顺序,我不确定Moshi是自动执行还是需要使用特定的Map实现来保证。

票数 0
EN

Stack Overflow用户

发布于 2019-01-08 03:44:59

您可以在自定义适配器中获取make联盟列表。

代码语言:javascript
代码运行次数: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)时,不要忘记添加适配器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53956979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档