Как разобрать JSON в Class в Kotlin (нестандартный формат) - PullRequest
0 голосов
/ 04 октября 2019

У меня есть следующий формат JSON:

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

Я пытаюсь проанализировать его из JSON, используя gson в классах Kotlin, для которых у меня есть следующее:

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 голосов
/ 04 октября 2019

Я считаю, что 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
                     ....)

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...