Как получить значение ключа от JSON с помощью модернизации - PullRequest
2 голосов
/ 10 апреля 2019

У меня есть ответ Json, подобный этому, Как получить дату

     {
  "2019-04-08": [
{
  "path": "/HEdY2Ry1fIMVq0GmN5NipS62SMcHpGH6ocZ0PU0p.png",
  "org_name": "bmi_icon.png"
},
{
  "path": "/v5QvdZfpZgGHh3ZfWNlvpTKYssXItbl1M6aaxlCJ.png",
  "org_name": "heartrate.png"
}
  ],
   "2019-04-01": [
{
  "path": "/L6xuyZGhy0giq8K4rxGnkcO1OND9lRzDrDHvokol.png",
  "org_name": "avatar.png"
}
  ],
  "2019-04-04": [
{
  "path": "/lRwBmuVMPv1AWdo00onOy5eOXuCacvfbfBVAaCZ1.jpeg",
  "org_name": "bp.jpg"
}
  ],
    "2019-04-10": [
{
  "path": "/aA5rV0FAStrtCH328jX9lLwHYRCIo8TuQ7f0PouV.png",
  "org_name": "Screenshot_20180717-183728.png"
}
  ]
}

Мне нужно получить дату из ответа

Мне нужно получить дату для каждого цикла

1 Ответ

0 голосов
/ 10 апреля 2019

Так что я считаю, что дооснащение позволяет использовать gson вручную, в соответствии с использованием gson

Структура json, которую вы описали, означает, что у вас нет земельного объекта kotlin наверхний уровень, но карта земли котлин.Если у вас есть контроль над API, который вы используете, постарайтесь не переводить Карты на верхний уровень - что это за карта?В идеале у вас есть хороший четко определенный объект на верхнем уровне, и в нем есть поля, которые передают семантику данных, которые они инкапсулируют.Но это справка.

Давайте определим объект, которому соответствуют ваши даты:

data class ImageMapping(
        val path: String,
        val org_name: String
)

А затем, для вашей конкретной структуры данных, вам нужно будет использовать прямой вызоввашего сервиса дооснащения и получить доступ к телу ответа напрямую.Если у вас есть это, вы можете десериализовать это самостоятельно.Я не знаю, как или как выглядят ваши конечные точки, и этот вопрос не о подключении Retrofit Я думаю, речь идет о десериализации json с Map в качестве верхнего объекта.Надеюсь, этого достаточно, чтобы вы подключили его к своему собственному коду:

    val call = yourRetrofitService.getYourData(yourArgument)
    val result = call.execute().body()
    val gson = Gson()
    val type = object : TypeToken<Map<String, List<ImageMapping>>>() {}.type
    val map: Map<String, List<ImageMapping>> = gson.fromJson(result, type)
    map.forEach{entry ->
        println(entry.key) // This should be your dates.
    }

Ключевая часть, чтобы заставить json работать с типом карты в Kotlin, - определить этот TypeToken.

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