You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin新手求助:如何将对象字段转换为指定结构的列表?

Kotlin对象字段转列表的实现方法

针对你提出的需求——把对象的每个键值对单独封装成一个对象再组成列表,下面分几种常见场景给出实现代码:

场景1:处理Kotlin Map类型

如果你的conversion_rates已经是Kotlin中的Map<String, Double>,直接遍历键值对转换即可:

val conversionRates = mapOf(
    "USD" to 1.0,
    "AED" to 3.6725,
    "AFN" to 89.6333
)

// 遍历每个键值对,封装成单键Map后收集为列表
val resultList = conversionRates.entries.map { entry ->
    mapOf(entry.key to entry.value)
}

// 输出结果:[{"USD":1.0}, {"AED":3.6725}, {"AFN":89.6333}]
println(resultList)

场景2:处理原始JSON字符串

如果拿到的是包含conversion_rates的JSON字符串,用Gson库解析后再转换(需先在项目中引入Gson依赖):

import com.google.gson.Gson
import com.google.gson.reflect.TypeToken

val jsonString = """{
    "conversion_rates":{
        "USD":1,
        "AED":3.6725,
        "AFN":89.6333
    }
}"""

// 解析JSON为嵌套Map
val gson = Gson()
val jsonMapType = object : TypeToken<Map<String, Map<String, Double>>>() {}.type
val jsonMap = gson.fromJson<Map<String, Map<String, Double>>>(jsonString, jsonMapType)

// 提取conversion_rates并转换为目标列表
val conversionRates = jsonMap["conversion_rates"] ?: emptyMap()
val resultList = conversionRates.entries.map { mapOf(it.key to it.value) }

println(resultList)

场景3:处理自定义数据类

如果是自定义的Kotlin数据类,可通过反射遍历字段实现(反射性能稍弱,适合小体量数据):

import kotlin.reflect.full.memberProperties

// 定义数据类
data class ConversionRates(
    val USD: Double,
    val AED: Double,
    val AFN: Double
)

val ratesObj = ConversionRates(1.0, 3.6725, 89.6333)

// 反射获取所有字段,封装为单键Map列表
val resultList = ratesObj::class.memberProperties.map { prop ->
    mapOf(prop.name to prop.get(ratesObj))
}

println(resultList)

内容的提问来源于stack exchange,提问作者Protozoa genetic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 11:50:23