如何在 kotlin 中转换这个复杂的 json
Posted
技术标签:
【中文标题】如何在 kotlin 中转换这个复杂的 json【英文标题】:How to convert this complex json in kotlin 【发布时间】:2021-11-09 04:01:35 【问题描述】:我想将此 Json 文件转换为 kotlin :
"results":
"ALL":
"currencyName": "Albanian Lek",
"currencySymbol": "Lek",
"id": "ALL"
,
"XCD":
"currencyName": "East Caribbean Dollar",
"currencySymbol": "$",
"id": "XCD"
interface Api
@GET(ApiEndPoints.GET_CURRENCIES)
suspend fun getCurrencies(
@Query(Constants.API_KEY)
countryCode: String = ApiEndPoints.API_KEY,
@Query(Constants.FROM_TO)
apiKey:String = "USD_USD",
@Query("compact")
compact:String = "ultra"
):CurrencyResults
型号:
data class CurrencyResults(
val results: Map<String, Currency>
)
data class Currency(
val currencyName: String,
val currencySymbol: String,
val id: String,
)
查看模型:
init
viewModelScope.launch
//Should get result here
它的 JSON 包含超过 100 个像上面这个 sn-p 的对象!我不能在这里得到它 当我尝试将其转换为 kotlin 时,我得到错误或 null 或必须编写超过 100 个类来检测所有 json 对象! 我想将它转换为 Currency 模型类来保存名称、符号和 id ! 我能做什么?
【问题讨论】:
你是如何转换这个 json 文件的? 这是我的问题 使用此链接将 json 响应转换为数据类。 json2kt.com @DnyaneshwarPatil 这个工具可能有助于编写代码本身,但它无助于定义它应该如何。它显然无法检测到对象的 JSON 键何时是动态的并指向相同类型的值,在这种情况下,该对象应该表示为映射而不是数据类。此外,它似乎生成了多个相同的数据类,而不是重复使用同一个。 【参考方案1】:怎么样:
data class CurrencyResults(
val results: Map<String, Currency>
)
data class Currency(
val currencyName: String,
val currencySymbol: String,
val id: String,
)
【讨论】:
如何使用它? @GET(ApiEndPoints.GET_CURRENCIES) 暂停乐趣 getCurrencies(@Query(Constants.API_KEY) countryCode: String = ApiEndPoints.API_KEY, @Query(Constants.FROM_TO) apiKey:String = "USD_USD", @Query("compact") 紧凑: String = "ultra"):CurrencyResults 当我像这样使用它并从 viewModel 调用它时,它返回空列表!你能告诉我完整的例子吗【参考方案2】:这个模型应该可以工作:
data class Currencies(val results : Map<String, Currency>)
data class Currency(val currencyName : String, val currencySymbol : String, val id : String)
您没有提及如何转换它们,使用 3rd 方库或其他方式,但是在您有未知键和一致的 Json 对象的情况下,使用 Map<K, V>
模型结构通常是标准的。
【讨论】:
如何使用它? @GET(ApiEndPoints.GET_CURRENCIES) 暂停乐趣 getCurrencies(@Query(Constants.API_KEY) countryCode: String = ApiEndPoints.API_KEY, @Query(Constants.FROM_TO) apiKey:String = "USD_USD", @Query("compact") 紧凑: String = "ultra"):CurrencyResults 当我像这样使用它并从 viewModel 调用它时,它返回空列表!你能告诉我完整的例子吗 完整代码来自您的问题...而不是 cmets。以上是关于如何在 kotlin 中转换这个复杂的 json的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 的 Kotlin 中使用 GSON 将 JSON 对象转换为 JSON 数组
如何在 Kotlin Android 中将字符串转换为 JSON 对象 [重复]
如何将 C# 代码转换为 Kotlin 由 Json 库组成