如何以Kotlin(非标准格式)将JSON解析为Class

时间:2019-10-04 10:55:36

标签: android kotlin gson

我具有以下JSON格式:

{
  "July 2019": [
    {
      "id": 6783,
      "home_team": "Team Name",
      ...
    },
    {...}
  ],
  "August 2019" : [
    {
      "id": 6783,
      "home_team": "Team Name",
      ...
    },
    {...}
  ],
  ...
}

我正在尝试使用gson in到Kotlin类从JSON解析它,为此,我具有以下特点:

inner class Fixture(val id: Int, val home_team: String)

inner class Fixtures(val date: String, val fixtures: ArrayList<Fixture>)

然后我使用OkHTTPClient下载JSON并尝试使用以下方法进行解析:

val body = response.body?.string()
val gson = GsonBuilder().create()
val fixtures = gson.fromJson(body, Array<Fixtures>::class.java).toList()

主体已正确解析(我在调试器中看到了),但是没有创建类,并且LOGCAT给了我:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我认为这是因为日期位于对象而不是数组中,但是我不知道该如何处理。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我相信具有这种结构的JSON几乎不可能用gson自动解析。因为日期是字段而不是值。但是,如果您事先了解所有字段,那么可以将Fictures类设为

inner class Fixtures(@SerializedName("July 2019") val date1: ArrayList<Fixture> ,
                     @SerializedName("August 2019") val date2: ArrayList<Fixture>,
                    //repeat this for every field
                     ....)

例如。