Kotlin 如何使用改型从json获取键值

Kotlin 如何使用改型从json获取键值,kotlin,retrofit,Kotlin,Retrofit,我有一个类似这样的Json响应,如何获取日期 { "2019-04-08": [ { "path": "/HEdY2Ry1fIMVq0GmN5NipS62SMcHpGH6ocZ0PU0p.png", "org_name": "bmi_icon.png" }, { "path": "/v5QvdZfpZgGHh3ZfWNlvpTKYssXItbl1M6aaxlCJ.png", "org_name": "heartrate.png" } ], "2019-04

我有一个类似这样的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"
}
  ]
}
我需要从回复中得到日期


我需要获得每个回路的日期,因此我相信改装允许手动使用gson,如

您所描述的json结构意味着您在顶层没有kotlin land对象,而是有一个kotlin land Map。如果您对正在使用的API有任何控制权,请尽量不要将映射放在顶层-映射是什么?理想情况下,您在顶层有一个定义良好的对象,其中有字段,用于传递它们封装的数据的语义。但是,这是一个助教

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

data class ImageMapping(
        val path: String,
        val org_name: String
)
然后,对于特定的数据结构,您将需要使用改装服务的直接呼叫,并直接访问响应主体。一旦你有了它,你可以自己反序列化它。我不知道您的端点是什么样子的,我想这个问题不是关于连接改造,而是关于用映射作为顶级对象反序列化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.
    }
val call=yourservice.getYourData(yourArgument)
val result=call.execute().body()
val gson=gson()
val type=object:TypeToken(){}.type
val-map:map=gson.fromJson(结果,类型)
map.forEach{entry->
println(entry.key)//这应该是您的日期。
}

让json与Kotlin中的映射类型一起工作的关键部分是定义该TypeToken。

我应该在哪里添加此代码,以及我的模型类看起来如何@Laurence@RT16-我更新了答案,希望这足以让您调整自己的代码来手动反序列化该映射。