gpt4 book ai didi

android - 如何使用 Retrofit/Kotlin 仅提取一个对象或 Json 文件数组?

转载 作者:行者123 更新时间:2023-12-02 13:42:42 26 4
gpt4 key购买 nike

我是 oop 和 android dev 的新手,我试图只提取这个 json 文件的一小部分。我只想取回“重量级”排名,没有其他重量划分。任何帮助将不胜感激!
这是我的模型:

data class Rankings(
@SerializedName("rankings")
val rankings: List<Ranking>
)
data class Ranking(
@SerializedName("competitor_rankings")
val competitorRankings: List<CompetitorRanking>,
@SerializedName("name")
val name: String,
@SerializedName("type_id")
val typeId: Int,
@SerializedName("week")
val week: Int,
@SerializedName("year")
val year: Int
)
data class CompetitorRanking(
@SerializedName("competitor")
val competitor: Competitor,
@SerializedName("rank")
val rank: Int
)
data class Competitor(
@SerializedName("abbreviation")
val abbreviation: String,
@SerializedName("id")
val id: String,
@SerializedName("name")
val name: String
)

这是我的api接口(interface):
    @GET("ufc/trial/v2/en/rankings.json")
suspend fun getRankings(@Query("api_key") api_key: String): Rankings

companion object {

fun create(): ApiInterface {
val retrofit = Retrofit.Builder()
.baseUrl("https://api.sportradar.us/")
.addCallAdapterFactory(CoroutineCallAdapterFactory.invoke())
.addConverterFactory(GsonConverterFactory.create())
.build()
return retrofit.create(ApiInterface::class.java)
}

}

}

这是我的 api 调用:
lifecycleScope.launch(Dispatchers.IO) {
val result = api.getRankings("MY_API_KEY_WILL_GO_HERE")
Log.d(TAG,"${result.rankings}")
}


这是我的 json 文件(由于字符限制,我无法发布整个内容,但它本质上只是另外 8 个排名数组):
"rankings": [
{
"type_id": 8,
"name": "pound_for_pound",
"year": 2020,
"week": 21,
"competitor_rankings": [
{
"rank": 1,
"movement": 0,
"competitor": {
"id": "sr:competitor:253371",
"name": "Jones, Jon",
"abbreviation": "JON"
}
},
{
"rank": 2,
"movement": 0,
"competitor": {
"id": "sr:competitor:250879",
"name": "Nurmagomedov, Khabib",
"abbreviation": "NUR"
}
},
{
"rank": 3,
"movement": 1,
"competitor": {
"id": "sr:competitor:237684",
"name": "Miocic, Stipe",
"abbreviation": "MIO"
}
},
{
"rank": 4,
"movement": 1,
"competitor": {
"id": "sr:competitor:410485",
"name": "Adesanya, Israel",
"abbreviation": "ADE"
}
},
{
"rank": 5,
"movement": 1,
"competitor": {
"id": "sr:competitor:253373",
"name": "Cormier, Daniel",
"abbreviation": "COR"
}
},
{
"rank": 6,
"movement": 1,
"competitor": {
"id": "sr:competitor:273539",
"name": "Usman, Kamaru",
"abbreviation": "USM"
}
},
{
"rank": 7,
"movement": 1,
"competitor": {
"id": "sr:competitor:290262",
"name": "Volkanovski, Alex",
"abbreviation": "VOL"
}
},
{
"rank": 8,
"movement": 1,
"competitor": {
"id": "sr:competitor:237676",
"name": "McGregor, Conor",
"abbreviation": "MCG"
}
},
{
"rank": 9,
"movement": 1,
"competitor": {
"id": "sr:competitor:237652",
"name": "Holloway, Max",
"abbreviation": "HOL"
}
},
{
"rank": 10,
"movement": 1,
"competitor": {
"id": "sr:competitor:351762",
"name": "Gaethje, Justin",
"abbreviation": "GAE"
}
},
{
"rank": 11,
"movement": 1,
"competitor": {
"id": "sr:competitor:261799",
"name": "Poirier, Dustin",
"abbreviation": "POI"
}
},
{
"rank": 12,
"movement": 1,
"competitor": {
"id": "sr:competitor:237646",
"name": "Ferguson, Tony",
"abbreviation": "FER"
}
},
{
"rank": 13,
"movement": 1,
"competitor": {
"id": "sr:competitor:253377",
"name": "Whittaker, Robert",
"abbreviation": "WHI"
}
},
{
"rank": 14,
"movement": 1,
"competitor": {
"id": "sr:competitor:274653",
"name": "Woodley, Tyron",
"abbreviation": "WOO"
}
},
{
"rank": 15,
"movement": 0,
"competitor": {
"id": "sr:competitor:250145",
"name": "Ngannou, Francis",
"abbreviation": "NGA"
}
}
]
},
{
"type_id": 16,
"name": "heavyweight",
"year": 2020,
"week": 21,
"competitor_rankings": [
{
"rank": 0,
"movement": 0,
"competitor": {
"id": "sr:competitor:237684",
"name": "Miocic, Stipe",
"abbreviation": "MIO"
}
},
{
"rank": 1,
"movement": 0,
"competitor": {
"id": "sr:competitor:253373",
"name": "Cormier, Daniel",
"abbreviation": "COR"
}
},
{
"rank": 2,
"movement": 0,
"competitor": {
"id": "sr:competitor:250145",
"name": "Ngannou, Francis",
"abbreviation": "NGA"
}
},
{
"rank": 3,
"movement": 0,
"competitor": {
"id": "sr:competitor:542009",
"name": "Blaydes, Curtis",
"abbreviation": "BLA"
}
},
{
"rank": 4,
"movement": 0,
"competitor": {
"id": "sr:competitor:237636",
"name": "Dos Santos, Junior",
"abbreviation": "DOS"
}
},
{
"rank": 4,
"movement": 1,
"competitor": {
"id": "sr:competitor:542099",
"name": "Lewis, Derrick",
"abbreviation": "LEW"
}
},
{
"rank": 6,
"movement": 0,
"competitor": {
"id": "sr:competitor:542143",
"name": "Rozenstruik, Jairzinho",
"abbreviation": "ROZ"
}
},
{
"rank": 7,
"movement": 0,
"competitor": {
"id": "sr:competitor:542161",
"name": "Volkov, Alexander",
"abbreviation": "VOL"
}
},
{
"rank": 8,
"movement": 0,
"competitor": {
"id": "sr:competitor:237694",
"name": "Overeem, Alistair",
"abbreviation": "OVE"
}
},
{
"rank": 9,
"movement": 0,
"competitor": {
"id": "sr:competitor:254231",
"name": "Harris, Walt",
"abbreviation": "HAR"
}
},
{
"rank": 10,
"movement": 0,
"competitor": {
"id": "sr:competitor:542117",
"name": "Oleinik, Aleksei",
"abbreviation": "OLE"
}
},
{
"rank": 11,
"movement": 0,
"competitor": {
"id": "sr:competitor:244080",
"name": "Abdurakhimov, Shamil",
"abbreviation": "ABD"
}
},
{
"rank": 12,
"movement": 0,
"competitor": {
"id": "sr:competitor:542079",
"name": "Ivanov, Blagoy",
"abbreviation": "IVA"
}
},
{
"rank": 13,
"movement": 0,
"competitor": {
"id": "sr:competitor:542145",
"name": "Sakai, Augusto",
"abbreviation": "SAK"
}
},
{
"rank": 14,
"movement": 0,
"competitor": {
"id": "sr:competitor:515358",
"name": "Pavlovich, Sergey",
"abbreviation": "PAV"
}
},
{
"rank": 15,
"movement": 0,
"competitor": {
"id": "sr:competitor:257349",
"name": "Werdum, Fabricio",
"abbreviation": "WER"
}
}
]
},

最佳答案

您可以使用 List.first方法:

lifecycleScope.launch(Dispatchers.IO) {
val result = api.getRankings("MY_API_KEY_WILL_GO_HERE")
val ranking = result.rankings.first { it.name == "heavyweight" }
}

关于android - 如何使用 Retrofit/Kotlin 仅提取一个对象或 Json 文件数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61983339/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com