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
相关产品推荐
相关产品推荐

