Kotlin 如何使用改型从json获取键值
我有一个类似这样的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
{
"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-我更新了答案,希望这足以让您调整自己的代码来手动反序列化该映射。