如何使用翻新从JSON获取键值

时间:2019-04-10 12:45:25

标签: kotlin retrofit

我有这样的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 :(得分:0)

因此,我相信根据leveraging gson

的改进可以手动使用gson

您所描述的json的结构意味着您在顶层没有Kotlin Land对象,但是没有Kotlin Land Map。如果您可以控制所使用的API,请尽量不要将Maps放在顶层-它是什么地图?理想情况下,您在顶层有一个很好的定义良好的对象,并且其中包含字段,这些字段传达了所存储数据的语义。但这是一个缺点。

让我们定义一个您的日期映射到的对象:

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

然后,对于您特定的数据结构,您将需要使用Retrofit服务的直接调用并直接访问响应的正文。一旦有了它,就可以自己反序列化。我不知道您的端点的外观或样子,这个问题不是关于连接Retrofit,我想的是关于使用Map作为顶部对象反序列化json。希望这足以将其连接到您自己的代码中:

    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中的Map类型配合使用的关键部分是定义该TypeToken。